Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package simdutf for openSUSE:Factory checked 
in at 2026-10-23 20:21:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/simdutf (Old)
 and      /work/SRC/openSUSE:Factory/.simdutf.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "simdutf"

Fri Oct 23 20:21:17 2026 rev:10 rq:1386750 version:9.3.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/simdutf/simdutf.changes  2026-10-16 
20:06:48.157905604 +0200
+++ /work/SRC/openSUSE:Factory/.simdutf.new.2252680/simdutf.changes     
2026-10-23 20:21:31.553569739 +0200
@@ -1,0 +2,8 @@
+Sat Oct 17 11:50:15 UTC 2026 - Dominique Leuenberger <[email protected]>
+
+- Update to version 9.3.2:
+  * icelake: unroll the base64 encoding loop
+- Changes from version 9.3.1:
+  + icelake: use plain loads in the base64 encoding loop
+
+-------------------------------------------------------------------

Old:
----
  simdutf-9.3.0.tar.xz

New:
----
  simdutf-9.3.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ simdutf.spec ++++++
--- /var/tmp/diff_new_pack.N9sp3X/_old  2026-10-23 20:21:32.631614852 +0200
+++ /var/tmp/diff_new_pack.N9sp3X/_new  2026-10-23 20:21:32.635615020 +0200
@@ -19,7 +19,7 @@
 %define lib_ver 37.0.0
 %define so_ver 37
 Name:           simdutf
-Version:        9.3.0
+Version:        9.3.2
 Release:        0
 Summary:        Unicode validation and transcoding at billions of characters 
per second
 

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.N9sp3X/_old  2026-10-23 20:21:32.704617907 +0200
+++ /var/tmp/diff_new_pack.N9sp3X/_new  2026-10-23 20:21:32.714618326 +0200
@@ -1,7 +1,7 @@
-mtime: 1791994885
-commit: ce4f7a1f0a5280a6363267ea84f89d45eb0c3c6f8af2abe4cc41e81c9e8cb76a
+mtime: 1792237928
+commit: a1e11eb2e43ced22e8258ca57f30f4e436eb2979470c3daab35464bb94f9ae2e
 url: https://src.opensuse.org/GNOME/simdutf
-revision: ce4f7a1f0a5280a6363267ea84f89d45eb0c3c6f8af2abe4cc41e81c9e8cb76a
+revision: a1e11eb2e43ced22e8258ca57f30f4e436eb2979470c3daab35464bb94f9ae2e
 trackingbranch: factory
 projectscmsync: https://src.opensuse.org/GNOME/_ObsPrj
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.N9sp3X/_old  2026-10-23 20:21:32.759620209 +0200
+++ /var/tmp/diff_new_pack.N9sp3X/_new  2026-10-23 20:21:32.765620460 +0200
@@ -3,7 +3,7 @@
   <service name="obs_scm" mode="manual">
     <param name="scm">git</param>
     <param name="url">https://github.com/simdutf/simdutf.git</param>
-    <param name="revision">v9.3.0</param>
+    <param name="revision">v9.3.2</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">v?(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-10-17 13:52:08.000000000 +0200
@@ -0,0 +1,5 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild
+osc-collab.*

++++++ simdutf-9.3.0.tar.xz -> simdutf-9.3.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simdutf-9.3.0/CMakeLists.txt 
new/simdutf-9.3.2/CMakeLists.txt
--- old/simdutf-9.3.0/CMakeLists.txt    2026-10-14 02:30:31.000000000 +0200
+++ new/simdutf-9.3.2/CMakeLists.txt    2026-10-17 05:05:59.000000000 +0200
@@ -3,7 +3,7 @@
 project(simdutf
   DESCRIPTION "Fast Unicode validation, transcoding and processing"
   LANGUAGES C CXX
-  VERSION 9.3.0
+  VERSION 9.3.2
 )
 
 include (TestBigEndian)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simdutf-9.3.0/Doxyfile new/simdutf-9.3.2/Doxyfile
--- old/simdutf-9.3.0/Doxyfile  2026-10-14 02:30:31.000000000 +0200
+++ new/simdutf-9.3.2/Doxyfile  2026-10-17 05:05:59.000000000 +0200
@@ -38,7 +38,7 @@
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = "9.3.0"
+PROJECT_NUMBER         = "9.3.2"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simdutf-9.3.0/README.md new/simdutf-9.3.2/README.md
--- old/simdutf-9.3.0/README.md 2026-10-14 02:30:31.000000000 +0200
+++ new/simdutf-9.3.2/README.md 2026-10-17 05:05:59.000000000 +0200
@@ -149,7 +149,7 @@
 
 1. Pull the library in a directory
    ```
-   wget 
https://github.com/simdutf/simdutf/releases/download/v9.3.0/singleheader.zip
+   wget 
https://github.com/simdutf/simdutf/releases/download/v9.3.2/singleheader.zip
    unzip singleheader.zip
    ```
    You can replace `wget` by `curl -OL https://...` if you prefer.
@@ -190,7 +190,7 @@
 
 ## Single-header version
 
-You can create a single-header version of the library where all of the code is 
put into two files (`simdutf.h` and `simdutf.cpp`). We publish a zip archive 
containing these files, e.g., see 
https://github.com/simdutf/simdutf/releases/download/v9.3.0/singleheader.zip
+You can create a single-header version of the library where all of the code is 
put into two files (`simdutf.h` and `simdutf.cpp`). We publish a zip archive 
containing these files, e.g., see 
https://github.com/simdutf/simdutf/releases/download/v9.3.2/singleheader.zip
 
 You may generate it on your own using a Python script.
 
@@ -3216,8 +3216,9 @@
 
 ## References
 
+* Daniel Lemire, [Fast Forgiving Base64 Decoding with SIMD 
Instructions](https://doi.org/10.1145/3859286), ACM Transactions on 
Architecture and Code Optimization, 2026.
 * Robert Clausecker, Daniel Lemire, [Fixing ill-formed UTF-16 strings with 
SIMD instructions](https://arxiv.org/abs/2601.06349),  Software: Practice and 
Experience to appear, 2026.
-* * Robert Clausecker, Daniel Lemire, [Transcoding Unicode Characters with 
AVX-512 Instructions](https://arxiv.org/abs/2212.05098),  Software: Practice 
and Experience 53 (12), 2023.
+* Robert Clausecker, Daniel Lemire, [Transcoding Unicode Characters with 
AVX-512 Instructions](https://arxiv.org/abs/2212.05098),  Software: Practice 
and Experience 53 (12), 2023.
 * Daniel Lemire, Wojciech Muła,  [Transcoding Billions of Unicode Characters 
per Second with SIMD Instructions](https://arxiv.org/abs/2109.10433), Software: 
Practice and Experience 52 (2), 2022.
 * John Keiser, Daniel Lemire, [Validating UTF-8 In Less Than One Instruction 
Per Byte](https://arxiv.org/abs/2010.03090), Software: Practice and Experience 
51 (5), 2021.
 * Wojciech Muła, Daniel Lemire, [Base64 encoding and decoding at almost the 
speed of a memory copy](https://arxiv.org/abs/1910.05109), Software: Practice 
and Experience 50 (2), 2020.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simdutf-9.3.0/include/simdutf/simdutf_version.h 
new/simdutf-9.3.2/include/simdutf/simdutf_version.h
--- old/simdutf-9.3.0/include/simdutf/simdutf_version.h 2026-10-14 
02:30:31.000000000 +0200
+++ new/simdutf-9.3.2/include/simdutf/simdutf_version.h 2026-10-17 
05:05:59.000000000 +0200
@@ -4,7 +4,7 @@
 #define SIMDUTF_SIMDUTF_VERSION_H
 
 /** The version of simdutf being used (major.minor.revision) */
-#define SIMDUTF_VERSION "9.3.0"
+#define SIMDUTF_VERSION "9.3.2"
 
 namespace simdutf {
 enum {
@@ -19,7 +19,7 @@
   /**
    * The revision (major.minor.REVISION) of simdutf being used.
    */
-  SIMDUTF_VERSION_REVISION = 0
+  SIMDUTF_VERSION_REVISION = 2
 };
 } // namespace simdutf
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simdutf-9.3.0/src/icelake/icelake_base64.inl.cpp 
new/simdutf-9.3.2/src/icelake/icelake_base64.inl.cpp
--- old/simdutf-9.3.0/src/icelake/icelake_base64.inl.cpp        2026-10-14 
02:30:31.000000000 +0200
+++ new/simdutf-9.3.2/src/icelake/icelake_base64.inl.cpp        2026-10-17 
05:05:59.000000000 +0200
@@ -93,6 +93,19 @@
   }
 }
 
+// Encodes 48 bytes (loaded with a plain 64-byte load) into 64 bytes.
+static inline void encode_block(const uint8_t *input, uint8_t *out,
+                                const __m512i shuffle_input,
+                                const __m512i multi_shifts,
+                                const __m512i lookup) {
+  const __m512i v =
+      _mm512_loadu_si512(reinterpret_cast<const __m512i *>(input));
+  const __m512i in = _mm512_permutexvar_epi8(shuffle_input, v);
+  const __m512i indices = _mm512_multishift_epi64_epi8(multi_shifts, in);
+  _mm512_storeu_si512(reinterpret_cast<__m512i *>(out),
+                      _mm512_permutexvar_epi8(indices, lookup));
+}
+
 template <bool base64_url, bool use_lines>
 size_t encode_base64_impl(char *dst, const char *src, size_t srclen,
                           base64_options options,
@@ -120,9 +133,36 @@
   __mmask64 input_mask = 0xffffffffffff; // (1 << 48) - 1
   // We want that input == end_input means that we must stop.
   const uint8_t *end_input = input + (size - (size % 48));
+  // Masked loads are noticeably slower than plain loads once the data no
+  // longer fits in L1. We use plain 64-byte loads as long as at least 64
+  // bytes remain readable, and fall back on masked loads near the end.
+  const uint8_t *const input_end = input + size;
+  if (!use_lines) {
+    // Most of the input: blocks that can use plain 64-byte loads, several
+    // blocks per iteration, without a bound check per block. The loop below
+    // handles the remaining full block, if any.
+    constexpr size_t unroll = 8;
+    size_t plain_blocks = size >= 64 ? (size - 16) / 48 : 0;
+    for (; plain_blocks >= unroll; plain_blocks -= unroll) {
+      for (size_t k = 0; k < unroll; k++) {
+        encode_block(input + 48 * k, out + 64 * k, shuffle_input, multi_shifts,
+                     lookup);
+      }
+      input += 48 * unroll;
+      out += 64 * unroll;
+    }
+    for (; plain_blocks > 0; plain_blocks--) {
+      encode_block(input, out, shuffle_input, multi_shifts, lookup);
+      input += 48;
+      out += 64;
+    }
+  }
   while (input != end_input) {
-    const __m512i v = _mm512_maskz_loadu_epi8(
-        input_mask, reinterpret_cast<const __m512i *>(input));
+    const __m512i v =
+        (size_t(input_end - input) >= 64)
+            ? _mm512_loadu_si512(reinterpret_cast<const __m512i *>(input))
+            : _mm512_maskz_loadu_epi8(input_mask,
+                                      reinterpret_cast<const __m512i 
*>(input));
     const __m512i in = _mm512_permutexvar_epi8(shuffle_input, v);
     const __m512i indices = _mm512_multishift_epi64_epi8(multi_shifts, in);
     const __m512i result = _mm512_permutexvar_epi8(indices, lookup);

++++++ simdutf.obsinfo ++++++
--- /var/tmp/diff_new_pack.N9sp3X/_old  2026-10-23 20:21:33.500651219 +0200
+++ /var/tmp/diff_new_pack.N9sp3X/_new  2026-10-23 20:21:33.504651387 +0200
@@ -1,5 +1,5 @@
 name: simdutf
-version: 9.3.0
-mtime: 1791937831
-commit: bb77e7bb98fe0c2296e7cf9f324c56fcd704885a
+version: 9.3.2
+mtime: 1792206359
+commit: 8d82299606e675b50de8dc16fd118aae4b65bfde
 

Reply via email to