agora inbox for pgsql-hackers@postgresql.org
help / color / mirror / Atom feed[PATCH va1 1/2] WIP: Use permanent FunctionCallInfo in printtup
326+ messages / 4 participants
[nested] [flat]
* [PATCH va1 1/2] WIP: Use permanent FunctionCallInfo in printtup
@ 2026-05-06 15:41 Andres Freund <andres@anarazel.de>
0 siblings, 0 replies; 326+ messages in thread
From: Andres Freund @ 2026-05-06 15:41 UTC (permalink / raw)
Should probably be done similarly for COPY
---
src/backend/access/common/printtup.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c
index 616bdafd395..6fa93a6798a 100644
--- a/src/backend/access/common/printtup.c
+++ b/src/backend/access/common/printtup.c
@@ -50,6 +50,8 @@ typedef struct
bool typisvarlena; /* is it varlena (ie possibly toastable)? */
int16 format; /* format code for this column */
FmgrInfo finfo; /* Precomputed call info for output fn */
+ /* XXX: Would probably be faster to allocate "inline" */
+ FunctionCallInfo outstate; /* Prepared FCI for slightly faster calls */
} PrinttupAttrInfo;
typedef struct
@@ -291,6 +293,10 @@ printtup_prepare_info(DR_printtup *myState, TupleDesc typeinfo, int numAttrs)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("unsupported format code: %d", format)));
+
+ /* both out and send funcs have one argument */
+ thisState->outstate = palloc0(SizeForFunctionCallInfo(1));
+ thisState->outstate->flinfo = &thisState->finfo;
}
}
@@ -353,12 +359,16 @@ printtup(TupleTableSlot *slot, DestReceiver *self)
VALGRIND_CHECK_MEM_IS_DEFINED(DatumGetPointer(attr),
VARSIZE_ANY(DatumGetPointer(attr)));
+ /* fill in argument for output / send function */
+ thisState->outstate->args[0].value = attr;
+
if (thisState->format == 0)
{
/* Text output */
char *outputstr;
- outputstr = OutputFunctionCall(&thisState->finfo, attr);
+ outputstr = DatumGetCString(FunctionCallInvoke(thisState->outstate));
+ Assert(!thisState->outstate->isnull);
pq_sendcountedtext(buf, outputstr, strlen(outputstr));
}
else
@@ -366,7 +376,8 @@ printtup(TupleTableSlot *slot, DestReceiver *self)
/* Binary output */
bytea *outputbytes;
- outputbytes = SendFunctionCall(&thisState->finfo, attr);
+ outputbytes = DatumGetByteaP(FunctionCallInvoke(thisState->outstate));
+ Assert(!thisState->outstate->isnull);
pq_sendint32(buf, VARSIZE(outputbytes) - VARHDRSZ);
pq_sendbytes(buf, VARDATA(outputbytes),
VARSIZE(outputbytes) - VARHDRSZ);
--
2.46.0.519.g2e7b89e038
--benhmb75h34eqzc4
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="va1-0002-Mega-WIP-Optimized-out-send-path-for-printtup.patch"
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
#endif
}
#endif /* ! USE_NO_SIMD */
--
2.50.1 (Apple Git-155)
--9YipY07vKHAnXga/--
^ permalink raw reply [nested|flat] 326+ messages in thread
* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30 Nathan Bossart <nathan@postgresql.org>
0 siblings, 0 replies; 326+ messages in thread
From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)
---
src/include/port/simd.h | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
/*
* Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_slli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshlq_n_u32((Vector32) v1, 4);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
#endif
}
#endif /* ! USE_NO_SIMD */
/*
* Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement. If you add a new
- * caller, be sure your expected values of "i" are handled.
*/
#ifndef USE_NO_SIMD
static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
#ifdef USE_SSE2
return _mm_srli_epi32(v1, i);
#elif defined(USE_NEON)
- switch (i)
- {
- case 4:
- return (Vector8) vshrq_n_u32((Vector32) v1, 4);
- case 8:
- return (Vector8) vshrq_n_u32((Vector32) v1, 8);
- default:
- Assert(false);
- return vector8_broadcast(0);
- }
+ /* negative shift count means right shift */
+ return (Vector8) vshlq_u32((Vector32) v1, vdupq_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-06 15:41 [PATCH va1 1/2] WIP: Use permanent FunctionCallInfo in printtup Andres Freund <andres@anarazel.de>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-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