agora inbox for pgsql-hackers@postgresql.org
help / color / mirror / Atom feed[PATCH v47 2/9] give options bitmask to table_delete/table_update
326+ messages / 4 participants
[nested] [flat]
* [PATCH v47 2/9] give options bitmask to table_delete/table_update
@ 2026-03-30 11:27 Álvaro Herrera <alvherre@kurilemu.de>
0 siblings, 0 replies; 326+ messages in thread
From: Álvaro Herrera @ 2026-03-30 11:27 UTC (permalink / raw)
---
src/backend/access/heap/heapam.c | 16 ++++++++++------
src/backend/access/heap/heapam_handler.c | 13 ++++++++-----
src/backend/access/table/tableam.c | 6 +++---
src/backend/executor/nodeModifyTable.c | 9 +++++++--
src/include/access/heapam.h | 7 ++++---
src/include/access/tableam.h | 23 +++++++++++++++--------
6 files changed, 47 insertions(+), 27 deletions(-)
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index d34136d2e94..0645b2d5f58 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -2862,8 +2862,8 @@ xmax_infomask_changed(uint16 new_infomask, uint16 old_infomask)
*/
TM_Result
heap_delete(Relation relation, const ItemPointerData *tid,
- CommandId cid, Snapshot crosscheck, bool wait,
- TM_FailureData *tmfd, bool changingPart)
+ CommandId cid, uint32 options, Snapshot crosscheck,
+ bool wait, TM_FailureData *tmfd)
{
TM_Result result;
TransactionId xid = GetCurrentTransactionId();
@@ -2876,6 +2876,7 @@ heap_delete(Relation relation, const ItemPointerData *tid,
TransactionId new_xmax;
uint16 new_infomask,
new_infomask2;
+ bool changingPart = (options & TABLE_DELETE_CHANGING_PARTITION) != 0;
bool have_tuple_lock = false;
bool iscombo;
bool all_visible_cleared = false;
@@ -3290,9 +3291,11 @@ simple_heap_delete(Relation relation, const ItemPointerData *tid)
TM_FailureData tmfd;
result = heap_delete(relation, tid,
- GetCurrentCommandId(true), InvalidSnapshot,
+ GetCurrentCommandId(true),
+ 0,
+ InvalidSnapshot,
true /* wait for commit */ ,
- &tmfd, false /* changingPart */ );
+ &tmfd);
switch (result)
{
case TM_SelfModified:
@@ -3331,7 +3334,7 @@ simple_heap_delete(Relation relation, const ItemPointerData *tid)
*/
TM_Result
heap_update(Relation relation, const ItemPointerData *otid, HeapTuple newtup,
- CommandId cid, Snapshot crosscheck, bool wait,
+ CommandId cid, uint32 options, Snapshot crosscheck, bool wait,
TM_FailureData *tmfd, LockTupleMode *lockmode,
TU_UpdateIndexes *update_indexes)
{
@@ -4585,7 +4588,8 @@ simple_heap_update(Relation relation, const ItemPointerData *otid, HeapTuple tup
LockTupleMode lockmode;
result = heap_update(relation, otid, tup,
- GetCurrentCommandId(true), InvalidSnapshot,
+ GetCurrentCommandId(true), 0,
+ InvalidSnapshot,
true /* wait for commit */ ,
&tmfd, &lockmode, update_indexes);
switch (result)
diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c
index cdd153c6b6d..69debeff516 100644
--- a/src/backend/access/heap/heapam_handler.c
+++ b/src/backend/access/heap/heapam_handler.c
@@ -313,21 +313,23 @@ heapam_tuple_complete_speculative(Relation relation, TupleTableSlot *slot,
static TM_Result
heapam_tuple_delete(Relation relation, ItemPointer tid, CommandId cid,
- Snapshot snapshot, Snapshot crosscheck, bool wait,
- TM_FailureData *tmfd, bool changingPart)
+ uint32 options, Snapshot snapshot, Snapshot crosscheck,
+ bool wait, TM_FailureData *tmfd)
{
/*
* Currently Deleting of index tuples are handled at vacuum, in case if
* the storage itself is cleaning the dead tuples by itself, it is the
* time to call the index tuple deletion also.
*/
- return heap_delete(relation, tid, cid, crosscheck, wait, tmfd, changingPart);
+ return heap_delete(relation, tid, cid, options, crosscheck, wait,
+ tmfd);
}
static TM_Result
heapam_tuple_update(Relation relation, ItemPointer otid, TupleTableSlot *slot,
- CommandId cid, Snapshot snapshot, Snapshot crosscheck,
+ CommandId cid, uint32 options pg_attribute_unused(),
+ Snapshot snapshot, Snapshot crosscheck,
bool wait, TM_FailureData *tmfd,
LockTupleMode *lockmode, TU_UpdateIndexes *update_indexes)
{
@@ -339,7 +341,8 @@ heapam_tuple_update(Relation relation, ItemPointer otid, TupleTableSlot *slot,
slot->tts_tableOid = RelationGetRelid(relation);
tuple->t_tableOid = slot->tts_tableOid;
- result = heap_update(relation, otid, tuple, cid, crosscheck, wait,
+ result = heap_update(relation, otid, tuple, cid, options,
+ crosscheck, wait,
tmfd, lockmode, update_indexes);
ItemPointerCopy(&tuple->t_self, &slot->tts_tid);
diff --git a/src/backend/access/table/tableam.c b/src/backend/access/table/tableam.c
index 86481d7c029..68ff0966f1c 100644
--- a/src/backend/access/table/tableam.c
+++ b/src/backend/access/table/tableam.c
@@ -320,9 +320,9 @@ simple_table_tuple_delete(Relation rel, ItemPointer tid, Snapshot snapshot)
result = table_tuple_delete(rel, tid,
GetCurrentCommandId(true),
- snapshot, InvalidSnapshot,
+ 0, snapshot, InvalidSnapshot,
true /* wait for commit */ ,
- &tmfd, false /* changingPart */ );
+ &tmfd);
switch (result)
{
@@ -369,7 +369,7 @@ simple_table_tuple_update(Relation rel, ItemPointer otid,
result = table_tuple_update(rel, otid, slot,
GetCurrentCommandId(true),
- snapshot, InvalidSnapshot,
+ 0, snapshot, InvalidSnapshot,
true /* wait for commit */ ,
&tmfd, &lockmode, update_indexes);
diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c
index 582bcc367c0..76728f08734 100644
--- a/src/backend/executor/nodeModifyTable.c
+++ b/src/backend/executor/nodeModifyTable.c
@@ -1522,14 +1522,18 @@ ExecDeleteAct(ModifyTableContext *context, ResultRelInfo *resultRelInfo,
ItemPointer tupleid, bool changingPart)
{
EState *estate = context->estate;
+ uint32 options = 0;
+
+ if (changingPart)
+ options |= TABLE_DELETE_CHANGING_PARTITION;
return table_tuple_delete(resultRelInfo->ri_RelationDesc, tupleid,
estate->es_output_cid,
+ options,
estate->es_snapshot,
estate->es_crosscheck_snapshot,
true /* wait for commit */ ,
- &context->tmfd,
- changingPart);
+ &context->tmfd);
}
/*
@@ -2331,6 +2335,7 @@ lreplace:
*/
result = table_tuple_update(resultRelationDesc, tupleid, slot,
estate->es_output_cid,
+ 0,
estate->es_snapshot,
estate->es_crosscheck_snapshot,
true /* wait for commit */ ,
diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h
index 6018dacf0f7..77560b22877 100644
--- a/src/include/access/heapam.h
+++ b/src/include/access/heapam.h
@@ -382,13 +382,14 @@ extern void heap_multi_insert(Relation relation, TupleTableSlot **slots,
int ntuples, CommandId cid, uint32 options,
BulkInsertState bistate);
extern TM_Result heap_delete(Relation relation, const ItemPointerData *tid,
- CommandId cid, Snapshot crosscheck, bool wait,
- TM_FailureData *tmfd, bool changingPart);
+ CommandId cid, uint32 options, Snapshot crosscheck,
+ bool wait, TM_FailureData *tmfd);
extern void heap_finish_speculative(Relation relation, const ItemPointerData *tid);
extern void heap_abort_speculative(Relation relation, const ItemPointerData *tid);
extern TM_Result heap_update(Relation relation, const ItemPointerData *otid,
HeapTuple newtup,
- CommandId cid, Snapshot crosscheck, bool wait,
+ CommandId cid, uint32 options,
+ Snapshot crosscheck, bool wait,
TM_FailureData *tmfd, LockTupleMode *lockmode,
TU_UpdateIndexes *update_indexes);
extern TM_Result heap_lock_tuple(Relation relation, HeapTuple tuple,
diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h
index ab2e7fc1dfe..6cdd949f58d 100644
--- a/src/include/access/tableam.h
+++ b/src/include/access/tableam.h
@@ -287,6 +287,11 @@ typedef struct TM_IndexDeleteOp
/* Follow update chain and lock latest version of tuple */
#define TUPLE_LOCK_FLAG_FIND_LAST_VERSION (1 << 1)
+/* "options" flag bits for table_tuple_delete */
+#define TABLE_DELETE_CHANGING_PARTITION (1 << 0)
+
+/* "options" flag bits for table_tuple_update */
+/* XXX none at present */
/* Typedef for callback function for table_index_build_scan */
typedef void (*IndexBuildCallback) (Relation index,
@@ -558,17 +563,18 @@ typedef struct TableAmRoutine
TM_Result (*tuple_delete) (Relation rel,
ItemPointer tid,
CommandId cid,
+ uint32 options,
Snapshot snapshot,
Snapshot crosscheck,
bool wait,
- TM_FailureData *tmfd,
- bool changingPart);
+ TM_FailureData *tmfd);
/* see table_tuple_update() for reference about parameters */
TM_Result (*tuple_update) (Relation rel,
ItemPointer otid,
TupleTableSlot *slot,
CommandId cid,
+ uint32 options,
Snapshot snapshot,
Snapshot crosscheck,
bool wait,
@@ -1533,12 +1539,12 @@ table_multi_insert(Relation rel, TupleTableSlot **slots, int nslots,
*/
static inline TM_Result
table_tuple_delete(Relation rel, ItemPointer tid, CommandId cid,
- Snapshot snapshot, Snapshot crosscheck, bool wait,
- TM_FailureData *tmfd, bool changingPart)
+ uint32 options, Snapshot snapshot, Snapshot crosscheck,
+ bool wait, TM_FailureData *tmfd)
{
- return rel->rd_tableam->tuple_delete(rel, tid, cid,
+ return rel->rd_tableam->tuple_delete(rel, tid, cid, options,
snapshot, crosscheck,
- wait, tmfd, changingPart);
+ wait, tmfd);
}
/*
@@ -1578,12 +1584,13 @@ table_tuple_delete(Relation rel, ItemPointer tid, CommandId cid,
*/
static inline TM_Result
table_tuple_update(Relation rel, ItemPointer otid, TupleTableSlot *slot,
- CommandId cid, Snapshot snapshot, Snapshot crosscheck,
+ CommandId cid, uint32 options,
+ Snapshot snapshot, Snapshot crosscheck,
bool wait, TM_FailureData *tmfd, LockTupleMode *lockmode,
TU_UpdateIndexes *update_indexes)
{
return rel->rd_tableam->tuple_update(rel, otid, slot,
- cid, snapshot, crosscheck,
+ cid, options, snapshot, crosscheck,
wait, tmfd,
lockmode, update_indexes);
}
--
2.47.3
--2fxmamo6mu2qbxgv
Content-Type: text/x-diff; charset=utf-8
Content-Disposition: attachment;
filename="v47-0003-Add-CONCURRENTLY-option-to-REPACK-command.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-03-30 11:27 [PATCH v47 2/9] give options bitmask to table_delete/table_update Álvaro Herrera <alvherre@kurilemu.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