[1/3] stdlib: Add internal stdc_rotate_left implementation

Message ID 20260506184522.3278011-2-ubizjak@gmail.com (mailing list archive)
State Committed
Commit f7623844a710fcd483a4d8fbc99a901977cf76b8
Headers
Series stdlib, x86: Add internal stdc_rotate_left and use it in x86 pointer (de-)mangling |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Uros Bizjak May 6, 2026, 6:42 p.m. UTC
  It follows the C2y N3367 proposed interface, along with some tests
imported from gnulib (and adapted to glibc libsupport).

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
---
 SHARED-FILES                  |   1 +
 include/stdbit.h              |  62 ++++-
 stdlib/Makefile               |   1 +
 stdlib/tst-stdc_rotate_left.c | 457 ++++++++++++++++++++++++++++++++++
 4 files changed, 520 insertions(+), 1 deletion(-)
 create mode 100644 stdlib/tst-stdc_rotate_left.c
  

Comments

Adhemerval Zanella Netto May 7, 2026, 1:32 p.m. UTC | #1
On 06/05/26 15:42, Uros Bizjak wrote:
> It follows the C2y N3367 proposed interface, along with some tests
> imported from gnulib (and adapted to glibc libsupport).
> 
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> Cc: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  SHARED-FILES                  |   1 +
>  include/stdbit.h              |  62 ++++-
>  stdlib/Makefile               |   1 +
>  stdlib/tst-stdc_rotate_left.c | 457 ++++++++++++++++++++++++++++++++++
>  4 files changed, 520 insertions(+), 1 deletion(-)
>  create mode 100644 stdlib/tst-stdc_rotate_left.c
> 
> diff --git a/SHARED-FILES b/SHARED-FILES
> index 645040d7e1..c0260d6615 100644
> --- a/SHARED-FILES
> +++ b/SHARED-FILES
> @@ -113,6 +113,7 @@ gnulib:
>    stdlib/setenv.c
>    stdlib/strtoll.c
>    stdlib/strtoul.c
> +  stdlib/tst-stdc_rotate_left.c
>    stdlib/tst-stdc_rotate_right.c
>    # Merged from gnulib 2014-6-26, needs merge back
>    string/memchr.c
> diff --git a/include/stdbit.h b/include/stdbit.h
> index d5aeada2b9..9734144ef5 100644
> --- a/include/stdbit.h
> +++ b/include/stdbit.h
> @@ -5,6 +5,66 @@
>  #ifndef _ISOMAC
>  # include <stdint.h>
>  
> +#  if __glibc_has_builtin (__builtin_stdc_rotate_left)
> +#   define stdc_rotate_left(__x, __n) (__builtin_stdc_rotate_left (__x, __n))
> +#   define stdc_rotate_left_uc(__x, __n) (stdc_rotate_left (__x, __n))
> +#   define stdc_rotate_left_us(__x, __n) (stdc_rotate_left (__x, __n))
> +#   define stdc_rotate_left_ui(__x, __n) (stdc_rotate_left (__x, __n))
> +#   define stdc_rotate_left_ul(__x, __n) (stdc_rotate_left (__x, __n))
> +#   define stdc_rotate_left_ull(__x, __n) (stdc_rotate_left (__x, __n))
> +#  else
> +#   if __WORDSIZE == 64
> +#    define __ROL_UL_GENERIC __rol64_inline
> +#   else
> +#    define __ROL_UL_GENERIC __rol32_inline
> +#   endif
> +#   define stdc_rotate_left(__x, __n)		\
> +   _Generic((__x),				\
> +      unsigned char: __rol8_inline,		\
> +      unsigned short: __rol16_inline,		\
> +      unsigned int: __rol32_inline,		\
> +      unsigned long: __ROL_UL_GENERIC,		\
> +      unsigned long long: __rol64_inline	\
> +   )(__x, __n)
> +
> +#   define __rol_generic(__v, __n)		\
> + ((__v << (__n & (sizeof __v * 8 - 1)))		\
> +  | (__v >> ((-__n) & (sizeof __v * 8 - 1))))
> +
> +static __always_inline uint8_t
> +__rol8_inline (uint8_t __x, unsigned int __n)
> +{
> +  return __rol_generic (__x, __n);
> +}
> +
> +static __always_inline uint16_t
> +__rol16_inline (uint16_t __x, unsigned int __n)
> +{
> +  return __rol_generic (__x, __n);
> +}
> +
> +static __always_inline uint32_t
> +__rol32_inline (uint32_t __x, unsigned int __n)
> +{
> +  return __rol_generic (__x, __n);
> +}
> +
> +static __always_inline uint64_t
> +__rol64_inline (uint64_t __x, unsigned int __n)
> +{
> +  return __rol_generic (__x, __n);
> +}
> +#   define stdc_rotate_left_uc(__x, __n) (__rol8_inline (__x, __n))
> +#   define stdc_rotate_left_us(__x, __n) (__rol16_inline (__x, __n))
> +#   define stdc_rotate_left_ui(__x, __n) (__rol32_inline (__x, __n))
> +#   if __WORDSIZE == 64
> +#    define stdc_rotate_left_ul(__x, __n) (__rol64_inline (__x, __n))
> +#   else
> +#    define stdc_rotate_left_ul(__x, __n) (__rol32_inline (__x, __n))
> +#   endif
> +#   define stdc_rotate_left_ull(__x, __n) (__rol64_inline (__x, __n))
> +#  endif /* __glibc_has_builtin (__builtin_stdc_rotate_left) */
> +
>  #  if __glibc_has_builtin (__builtin_stdc_rotate_right)
>  #   define stdc_rotate_right(__x, __n) (__builtin_stdc_rotate_right (__x, __n))
>  #   define stdc_rotate_right_uc(__x, __n) (stdc_rotate_right (__x, __n))
> @@ -49,7 +109,7 @@ __ror32_inline (uint32_t __x, unsigned int __n)
>    return __ror_generic (__x, __n);
>  }
>  
> -static __always_inline  uint64_t
> +static __always_inline uint64_t
>  __ror64_inline (uint64_t __x, unsigned int __n)
>  {
>    return __ror_generic (__x, __n);
> diff --git a/stdlib/Makefile b/stdlib/Makefile
> index b5f136ca1a..addf7dc99f 100644
> --- a/stdlib/Makefile
> +++ b/stdlib/Makefile
> @@ -388,6 +388,7 @@ endif
>  
>  tests-internal := \
>    tst-qsort4 \
> +  tst-stdc_rotate_left \
>    tst-stdc_rotate_right \
>    tst-strtod1i \
>    tst-strtod3 \
> diff --git a/stdlib/tst-stdc_rotate_left.c b/stdlib/tst-stdc_rotate_left.c
> new file mode 100644
> index 0000000000..e4b8052969
> --- /dev/null
> +++ b/stdlib/tst-stdc_rotate_left.c
> @@ -0,0 +1,457 @@
> +/* Test the stdc_rotate_left_* functions and macro.
> +   Copyright (C) 2026 Free Software Foundation, Inc.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <stdbit.h>
> +#include <support/check.h>
> +
> +#define TEST_CASE(type, function, value, shift, expect)         \
> +  do                                                            \
> +    {                                                           \
> +      type v = value;                                           \
> +      TEST_COMPARE (function (v, shift), expect);               \
> +      TEST_COMPARE (stdc_rotate_left (v, shift), expect);       \
> +    }                                                           \
> +  while (false)
> +
> +static void
> +test_stdc_rotate_left_uc (void)
> +{
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 0, 0x96);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 1, 0x2d);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 2, 0x5a);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 3, 0xb4);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 4, 0x69);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 5, 0xd2);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 6, 0xa5);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 7, 0x4b);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 8, 0x96);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 9, 0x2d);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 10, 0x5a);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 11, 0xb4);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 12, 0x69);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 13, 0xd2);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 14, 0xa5);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 15, 0x4b);
> +  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 16, 0x96);
> +}
> +
> +static void
> +test_stdc_rotate_left_us (void)
> +{
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 0, 0x5e1aU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 1, 0xbc34U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 2, 0x7869U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 3, 0xf0d2U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 4, 0xe1a5U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 5, 0xc34bU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 6, 0x8697U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 7, 0x0d2fU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 8, 0x1a5eU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 9, 0x34bcU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 10, 0x6978U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 11, 0xd2f0U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 12, 0xa5e1U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 13, 0x4bc3U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 14, 0x9786U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 15, 0x2f0dU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 16, 0x5e1aU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 17, 0xbc34U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 18, 0x7869U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 19, 0xf0d2U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 20, 0xe1a5U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 21, 0xc34bU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 22, 0x8697U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 23, 0x0d2fU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 24, 0x1a5eU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 25, 0x34bcU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 26, 0x6978U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 27, 0xd2f0U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 28, 0xa5e1U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 29, 0x4bc3U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 30, 0x9786U);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 31, 0x2f0dU);
> +  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 32, 0x5e1aU);
> +}
> +
> +#define TEST_CASES_32(type, function)                                   \
> +  do                                                                    \
> +    {                                                                   \
> +      TEST_CASE (type, function, 0x51af3678UL, 0, 0x51af3678UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 1, 0xa35e6cf0UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 2, 0x46bcd9e1UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 3, 0x8d79b3c2UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 4, 0x1af36785UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 5, 0x35e6cf0aUL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 6, 0x6bcd9e14UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 7, 0xd79b3c28UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 8, 0xaf367851UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 9, 0x5e6cf0a3UL);        \
> +      TEST_CASE (type, function, 0x51af3678UL, 10, 0xbcd9e146UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 11, 0x79b3c28dUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 12, 0xf367851aUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 13, 0xe6cf0a35UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 14, 0xcd9e146bUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 15, 0x9b3c28d7UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 16, 0x367851afUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 17, 0x6cf0a35eUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 18, 0xd9e146bcUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 19, 0xb3c28d79UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 20, 0x67851af3UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 21, 0xcf0a35e6UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 22, 0x9e146bcdUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 23, 0x3c28d79bUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 24, 0x7851af36UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 25, 0xf0a35e6cUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 26, 0xe146bcd9UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 27, 0xc28d79b3UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 28, 0x851af367UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 29, 0x0a35e6cfUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 30, 0x146bcd9eUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 31, 0x28d79b3cUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 32, 0x51af3678UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 33, 0xa35e6cf0UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 34, 0x46bcd9e1UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 35, 0x8d79b3c2UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 36, 0x1af36785UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 37, 0x35e6cf0aUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 38, 0x6bcd9e14UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 39, 0xd79b3c28UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 40, 0xaf367851UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 41, 0x5e6cf0a3UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 42, 0xbcd9e146UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 43, 0x79b3c28dUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 44, 0xf367851aUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 45, 0xe6cf0a35UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 46, 0xcd9e146bUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 47, 0x9b3c28d7UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 48, 0x367851afUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 49, 0x6cf0a35eUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 50, 0xd9e146bcUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 51, 0xb3c28d79UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 52, 0x67851af3UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 53, 0xcf0a35e6UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 54, 0x9e146bcdUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 55, 0x3c28d79bUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 56, 0x7851af36UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 57, 0xf0a35e6cUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 58, 0xe146bcd9UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 59, 0xc28d79b3UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 60, 0x851af367UL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 61, 0x0a35e6cfUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 62, 0x146bcd9eUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 63, 0x28d79b3cUL);       \
> +      TEST_CASE (type, function, 0x51af3678UL, 64, 0x51af3678UL);       \
> +    }                                                                   \
> +  while (false)
> +
> +static void
> +test_stdc_rotate_left_ui (void)
> +{
> +  TEST_CASES_32 (unsigned int, stdc_rotate_left_ui);
> +}
> +
> +#define TEST_CASES_64(type, function)                                   \
> +  do                                                                    \
> +    {                                                                   \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 0,              \
> +                 0x59ae28915a84db37ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 1,              \
> +                 0xb35c5122b509b66eULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 2,              \
> +                 0x66b8a2456a136cddULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 3,              \
> +                 0xcd71448ad426d9baULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 4,              \
> +                 0x9ae28915a84db375ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 5,              \
> +                 0x35c5122b509b66ebULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 6,              \
> +                 0x6b8a2456a136cdd6ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 7,              \
> +                 0xd71448ad426d9bacULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 8,              \
> +                 0xae28915a84db3759ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 9,              \
> +                 0x5c5122b509b66eb3ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 10,             \
> +                 0xb8a2456a136cdd66ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 11,             \
> +                 0x71448ad426d9bacdULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 12,             \
> +                 0xe28915a84db3759aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 13,             \
> +                 0xc5122b509b66eb35ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 14,             \
> +                 0x8a2456a136cdd66bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 15,             \
> +                 0x1448ad426d9bacd7ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 16,             \
> +                 0x28915a84db3759aeULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 17,             \
> +                 0x5122b509b66eb35cULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 18,             \
> +                 0xa2456a136cdd66b8ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 19,             \
> +                 0x448ad426d9bacd71ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 20,             \
> +                 0x8915a84db3759ae2ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 21,             \
> +                 0x122b509b66eb35c5ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 22,             \
> +                 0x2456a136cdd66b8aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 23,             \
> +                 0x48ad426d9bacd714ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 24,             \
> +                 0x915a84db3759ae28ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 25,             \
> +                 0x22b509b66eb35c51ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 26,             \
> +                 0x456a136cdd66b8a2ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 27,             \
> +                 0x8ad426d9bacd7144ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 28,             \
> +                 0x15a84db3759ae289ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 29,             \
> +                 0x2b509b66eb35c512ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 30,             \
> +                 0x56a136cdd66b8a24ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 31,             \
> +                 0xad426d9bacd71448ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 32,             \
> +                 0x5a84db3759ae2891ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 33,             \
> +                 0xb509b66eb35c5122ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 34,             \
> +                 0x6a136cdd66b8a245ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 35,             \
> +                 0xd426d9bacd71448aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 36,             \
> +                 0xa84db3759ae28915ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 37,             \
> +                 0x509b66eb35c5122bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 38,             \
> +                 0xa136cdd66b8a2456ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 39,             \
> +                 0x426d9bacd71448adULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 40,             \
> +                 0x84db3759ae28915aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 41,             \
> +                 0x09b66eb35c5122b5ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 42,             \
> +                 0x136cdd66b8a2456aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 43,             \
> +                 0x26d9bacd71448ad4ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 44,             \
> +                 0x4db3759ae28915a8ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 45,             \
> +                 0x9b66eb35c5122b50ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 46,             \
> +                 0x36cdd66b8a2456a1ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 47,             \
> +                 0x6d9bacd71448ad42ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 48,             \
> +                 0xdb3759ae28915a84ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 49,             \
> +                 0xb66eb35c5122b509ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 50,             \
> +                 0x6cdd66b8a2456a13ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 51,             \
> +                 0xd9bacd71448ad426ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 52,             \
> +                 0xb3759ae28915a84dULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 53,             \
> +                 0x66eb35c5122b509bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 54,             \
> +                 0xcdd66b8a2456a136ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 55,             \
> +                 0x9bacd71448ad426dULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 56,             \
> +                 0x3759ae28915a84dbULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 57,             \
> +                 0x6eb35c5122b509b6ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 58,             \
> +                 0xdd66b8a2456a136cULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 59,             \
> +                 0xbacd71448ad426d9ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 60,             \
> +                 0x759ae28915a84db3ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 61,             \
> +                 0xeb35c5122b509b66ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 62,             \
> +                 0xd66b8a2456a136cdULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 63,             \
> +                 0xacd71448ad426d9bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 64,             \
> +                 0x59ae28915a84db37ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 65,             \
> +                 0xb35c5122b509b66eULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 66,             \
> +                 0x66b8a2456a136cddULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 67,             \
> +                 0xcd71448ad426d9baULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 68,             \
> +                 0x9ae28915a84db375ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 69,             \
> +                 0x35c5122b509b66ebULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 70,             \
> +                 0x6b8a2456a136cdd6ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 71,             \
> +                 0xd71448ad426d9bacULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 72,             \
> +                 0xae28915a84db3759ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 73,             \
> +                 0x5c5122b509b66eb3ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 74,             \
> +                 0xb8a2456a136cdd66ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 75,             \
> +                 0x71448ad426d9bacdULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 76,             \
> +                 0xe28915a84db3759aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 77,             \
> +                 0xc5122b509b66eb35ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 78,             \
> +                 0x8a2456a136cdd66bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 79,             \
> +                 0x1448ad426d9bacd7ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 80,             \
> +                 0x28915a84db3759aeULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 81,             \
> +                 0x5122b509b66eb35cULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 82,             \
> +                 0xa2456a136cdd66b8ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 83,             \
> +                 0x448ad426d9bacd71ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 84,             \
> +                 0x8915a84db3759ae2ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 85,             \
> +                 0x122b509b66eb35c5ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 86,             \
> +                 0x2456a136cdd66b8aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 87,             \
> +                 0x48ad426d9bacd714ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 88,             \
> +                 0x915a84db3759ae28ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 89,             \
> +                 0x22b509b66eb35c51ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 90,             \
> +                 0x456a136cdd66b8a2ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 91,             \
> +                 0x8ad426d9bacd7144ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 92,             \
> +                 0x15a84db3759ae289ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 93,             \
> +                 0x2b509b66eb35c512ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 94,             \
> +                 0x56a136cdd66b8a24ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 95,             \
> +                 0xad426d9bacd71448ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 96,             \
> +                 0x5a84db3759ae2891ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 97,             \
> +                 0xb509b66eb35c5122ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 98,             \
> +                 0x6a136cdd66b8a245ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 99,             \
> +                 0xd426d9bacd71448aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 100,            \
> +                 0xa84db3759ae28915ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 101,            \
> +                 0x509b66eb35c5122bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 102,            \
> +                 0xa136cdd66b8a2456ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 103,            \
> +                 0x426d9bacd71448adULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 104,            \
> +                 0x84db3759ae28915aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 105,            \
> +                 0x09b66eb35c5122b5ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 106,            \
> +                 0x136cdd66b8a2456aULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 107,            \
> +                 0x26d9bacd71448ad4ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 108,            \
> +                 0x4db3759ae28915a8ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 109,            \
> +                 0x9b66eb35c5122b50ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 110,            \
> +                 0x36cdd66b8a2456a1ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 111,            \
> +                 0x6d9bacd71448ad42ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 112,            \
> +                 0xdb3759ae28915a84ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 113,            \
> +                 0xb66eb35c5122b509ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 114,            \
> +                 0x6cdd66b8a2456a13ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 115,            \
> +                 0xd9bacd71448ad426ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 116,            \
> +                 0xb3759ae28915a84dULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 117,            \
> +                 0x66eb35c5122b509bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 118,            \
> +                 0xcdd66b8a2456a136ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 119,            \
> +                 0x9bacd71448ad426dULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 120,            \
> +                 0x3759ae28915a84dbULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 121,            \
> +                 0x6eb35c5122b509b6ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 122,            \
> +                 0xdd66b8a2456a136cULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 123,            \
> +                 0xbacd71448ad426d9ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 124,            \
> +                 0x759ae28915a84db3ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 125,            \
> +                 0xeb35c5122b509b66ULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 126,            \
> +                 0xd66b8a2456a136cdULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 127,            \
> +                 0xacd71448ad426d9bULL);                                \
> +      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 128,            \
> +                 0x59ae28915a84db37ULL);                                \
> +    }                                                                   \
> +  while (false)
> +
> +static void
> +test_stdc_rotate_left_ul (void)
> +{
> +  if (sizeof 0ul < sizeof 0ull)
> +    TEST_CASES_32 (unsigned long int, stdc_rotate_left_ul);
> +  else
> +    TEST_CASES_64 (unsigned long long int, stdc_rotate_left_ul);
> +}
> +
> +static void
> +test_stdc_rotate_left_ull (void)
> +{
> +  TEST_CASES_64 (unsigned long long int, stdc_rotate_left_ull);
> +}
> +
> +static int
> +do_test (void)
> +{
> +  test_stdc_rotate_left_uc ();
> +  test_stdc_rotate_left_us ();
> +  test_stdc_rotate_left_ui ();
> +  test_stdc_rotate_left_ul ();
> +  test_stdc_rotate_left_ull ();
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>
  

Patch

diff --git a/SHARED-FILES b/SHARED-FILES
index 645040d7e1..c0260d6615 100644
--- a/SHARED-FILES
+++ b/SHARED-FILES
@@ -113,6 +113,7 @@  gnulib:
   stdlib/setenv.c
   stdlib/strtoll.c
   stdlib/strtoul.c
+  stdlib/tst-stdc_rotate_left.c
   stdlib/tst-stdc_rotate_right.c
   # Merged from gnulib 2014-6-26, needs merge back
   string/memchr.c
diff --git a/include/stdbit.h b/include/stdbit.h
index d5aeada2b9..9734144ef5 100644
--- a/include/stdbit.h
+++ b/include/stdbit.h
@@ -5,6 +5,66 @@ 
 #ifndef _ISOMAC
 # include <stdint.h>
 
+#  if __glibc_has_builtin (__builtin_stdc_rotate_left)
+#   define stdc_rotate_left(__x, __n) (__builtin_stdc_rotate_left (__x, __n))
+#   define stdc_rotate_left_uc(__x, __n) (stdc_rotate_left (__x, __n))
+#   define stdc_rotate_left_us(__x, __n) (stdc_rotate_left (__x, __n))
+#   define stdc_rotate_left_ui(__x, __n) (stdc_rotate_left (__x, __n))
+#   define stdc_rotate_left_ul(__x, __n) (stdc_rotate_left (__x, __n))
+#   define stdc_rotate_left_ull(__x, __n) (stdc_rotate_left (__x, __n))
+#  else
+#   if __WORDSIZE == 64
+#    define __ROL_UL_GENERIC __rol64_inline
+#   else
+#    define __ROL_UL_GENERIC __rol32_inline
+#   endif
+#   define stdc_rotate_left(__x, __n)		\
+   _Generic((__x),				\
+      unsigned char: __rol8_inline,		\
+      unsigned short: __rol16_inline,		\
+      unsigned int: __rol32_inline,		\
+      unsigned long: __ROL_UL_GENERIC,		\
+      unsigned long long: __rol64_inline	\
+   )(__x, __n)
+
+#   define __rol_generic(__v, __n)		\
+ ((__v << (__n & (sizeof __v * 8 - 1)))		\
+  | (__v >> ((-__n) & (sizeof __v * 8 - 1))))
+
+static __always_inline uint8_t
+__rol8_inline (uint8_t __x, unsigned int __n)
+{
+  return __rol_generic (__x, __n);
+}
+
+static __always_inline uint16_t
+__rol16_inline (uint16_t __x, unsigned int __n)
+{
+  return __rol_generic (__x, __n);
+}
+
+static __always_inline uint32_t
+__rol32_inline (uint32_t __x, unsigned int __n)
+{
+  return __rol_generic (__x, __n);
+}
+
+static __always_inline uint64_t
+__rol64_inline (uint64_t __x, unsigned int __n)
+{
+  return __rol_generic (__x, __n);
+}
+#   define stdc_rotate_left_uc(__x, __n) (__rol8_inline (__x, __n))
+#   define stdc_rotate_left_us(__x, __n) (__rol16_inline (__x, __n))
+#   define stdc_rotate_left_ui(__x, __n) (__rol32_inline (__x, __n))
+#   if __WORDSIZE == 64
+#    define stdc_rotate_left_ul(__x, __n) (__rol64_inline (__x, __n))
+#   else
+#    define stdc_rotate_left_ul(__x, __n) (__rol32_inline (__x, __n))
+#   endif
+#   define stdc_rotate_left_ull(__x, __n) (__rol64_inline (__x, __n))
+#  endif /* __glibc_has_builtin (__builtin_stdc_rotate_left) */
+
 #  if __glibc_has_builtin (__builtin_stdc_rotate_right)
 #   define stdc_rotate_right(__x, __n) (__builtin_stdc_rotate_right (__x, __n))
 #   define stdc_rotate_right_uc(__x, __n) (stdc_rotate_right (__x, __n))
@@ -49,7 +109,7 @@  __ror32_inline (uint32_t __x, unsigned int __n)
   return __ror_generic (__x, __n);
 }
 
-static __always_inline  uint64_t
+static __always_inline uint64_t
 __ror64_inline (uint64_t __x, unsigned int __n)
 {
   return __ror_generic (__x, __n);
diff --git a/stdlib/Makefile b/stdlib/Makefile
index b5f136ca1a..addf7dc99f 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -388,6 +388,7 @@  endif
 
 tests-internal := \
   tst-qsort4 \
+  tst-stdc_rotate_left \
   tst-stdc_rotate_right \
   tst-strtod1i \
   tst-strtod3 \
diff --git a/stdlib/tst-stdc_rotate_left.c b/stdlib/tst-stdc_rotate_left.c
new file mode 100644
index 0000000000..e4b8052969
--- /dev/null
+++ b/stdlib/tst-stdc_rotate_left.c
@@ -0,0 +1,457 @@ 
+/* Test the stdc_rotate_left_* functions and macro.
+   Copyright (C) 2026 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stdbit.h>
+#include <support/check.h>
+
+#define TEST_CASE(type, function, value, shift, expect)         \
+  do                                                            \
+    {                                                           \
+      type v = value;                                           \
+      TEST_COMPARE (function (v, shift), expect);               \
+      TEST_COMPARE (stdc_rotate_left (v, shift), expect);       \
+    }                                                           \
+  while (false)
+
+static void
+test_stdc_rotate_left_uc (void)
+{
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 0, 0x96);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 1, 0x2d);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 2, 0x5a);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 3, 0xb4);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 4, 0x69);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 5, 0xd2);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 6, 0xa5);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 7, 0x4b);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 8, 0x96);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 9, 0x2d);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 10, 0x5a);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 11, 0xb4);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 12, 0x69);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 13, 0xd2);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 14, 0xa5);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 15, 0x4b);
+  TEST_CASE (unsigned char, stdc_rotate_left_uc, 0x96, 16, 0x96);
+}
+
+static void
+test_stdc_rotate_left_us (void)
+{
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 0, 0x5e1aU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 1, 0xbc34U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 2, 0x7869U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 3, 0xf0d2U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 4, 0xe1a5U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 5, 0xc34bU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 6, 0x8697U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 7, 0x0d2fU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 8, 0x1a5eU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 9, 0x34bcU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 10, 0x6978U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 11, 0xd2f0U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 12, 0xa5e1U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 13, 0x4bc3U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 14, 0x9786U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 15, 0x2f0dU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 16, 0x5e1aU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 17, 0xbc34U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 18, 0x7869U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 19, 0xf0d2U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 20, 0xe1a5U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 21, 0xc34bU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 22, 0x8697U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 23, 0x0d2fU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 24, 0x1a5eU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 25, 0x34bcU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 26, 0x6978U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 27, 0xd2f0U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 28, 0xa5e1U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 29, 0x4bc3U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 30, 0x9786U);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 31, 0x2f0dU);
+  TEST_CASE (unsigned short int, stdc_rotate_left_us, 0x5e1aU, 32, 0x5e1aU);
+}
+
+#define TEST_CASES_32(type, function)                                   \
+  do                                                                    \
+    {                                                                   \
+      TEST_CASE (type, function, 0x51af3678UL, 0, 0x51af3678UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 1, 0xa35e6cf0UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 2, 0x46bcd9e1UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 3, 0x8d79b3c2UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 4, 0x1af36785UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 5, 0x35e6cf0aUL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 6, 0x6bcd9e14UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 7, 0xd79b3c28UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 8, 0xaf367851UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 9, 0x5e6cf0a3UL);        \
+      TEST_CASE (type, function, 0x51af3678UL, 10, 0xbcd9e146UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 11, 0x79b3c28dUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 12, 0xf367851aUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 13, 0xe6cf0a35UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 14, 0xcd9e146bUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 15, 0x9b3c28d7UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 16, 0x367851afUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 17, 0x6cf0a35eUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 18, 0xd9e146bcUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 19, 0xb3c28d79UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 20, 0x67851af3UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 21, 0xcf0a35e6UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 22, 0x9e146bcdUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 23, 0x3c28d79bUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 24, 0x7851af36UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 25, 0xf0a35e6cUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 26, 0xe146bcd9UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 27, 0xc28d79b3UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 28, 0x851af367UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 29, 0x0a35e6cfUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 30, 0x146bcd9eUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 31, 0x28d79b3cUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 32, 0x51af3678UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 33, 0xa35e6cf0UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 34, 0x46bcd9e1UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 35, 0x8d79b3c2UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 36, 0x1af36785UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 37, 0x35e6cf0aUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 38, 0x6bcd9e14UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 39, 0xd79b3c28UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 40, 0xaf367851UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 41, 0x5e6cf0a3UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 42, 0xbcd9e146UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 43, 0x79b3c28dUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 44, 0xf367851aUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 45, 0xe6cf0a35UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 46, 0xcd9e146bUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 47, 0x9b3c28d7UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 48, 0x367851afUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 49, 0x6cf0a35eUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 50, 0xd9e146bcUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 51, 0xb3c28d79UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 52, 0x67851af3UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 53, 0xcf0a35e6UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 54, 0x9e146bcdUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 55, 0x3c28d79bUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 56, 0x7851af36UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 57, 0xf0a35e6cUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 58, 0xe146bcd9UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 59, 0xc28d79b3UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 60, 0x851af367UL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 61, 0x0a35e6cfUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 62, 0x146bcd9eUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 63, 0x28d79b3cUL);       \
+      TEST_CASE (type, function, 0x51af3678UL, 64, 0x51af3678UL);       \
+    }                                                                   \
+  while (false)
+
+static void
+test_stdc_rotate_left_ui (void)
+{
+  TEST_CASES_32 (unsigned int, stdc_rotate_left_ui);
+}
+
+#define TEST_CASES_64(type, function)                                   \
+  do                                                                    \
+    {                                                                   \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 0,              \
+                 0x59ae28915a84db37ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 1,              \
+                 0xb35c5122b509b66eULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 2,              \
+                 0x66b8a2456a136cddULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 3,              \
+                 0xcd71448ad426d9baULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 4,              \
+                 0x9ae28915a84db375ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 5,              \
+                 0x35c5122b509b66ebULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 6,              \
+                 0x6b8a2456a136cdd6ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 7,              \
+                 0xd71448ad426d9bacULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 8,              \
+                 0xae28915a84db3759ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 9,              \
+                 0x5c5122b509b66eb3ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 10,             \
+                 0xb8a2456a136cdd66ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 11,             \
+                 0x71448ad426d9bacdULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 12,             \
+                 0xe28915a84db3759aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 13,             \
+                 0xc5122b509b66eb35ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 14,             \
+                 0x8a2456a136cdd66bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 15,             \
+                 0x1448ad426d9bacd7ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 16,             \
+                 0x28915a84db3759aeULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 17,             \
+                 0x5122b509b66eb35cULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 18,             \
+                 0xa2456a136cdd66b8ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 19,             \
+                 0x448ad426d9bacd71ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 20,             \
+                 0x8915a84db3759ae2ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 21,             \
+                 0x122b509b66eb35c5ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 22,             \
+                 0x2456a136cdd66b8aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 23,             \
+                 0x48ad426d9bacd714ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 24,             \
+                 0x915a84db3759ae28ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 25,             \
+                 0x22b509b66eb35c51ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 26,             \
+                 0x456a136cdd66b8a2ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 27,             \
+                 0x8ad426d9bacd7144ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 28,             \
+                 0x15a84db3759ae289ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 29,             \
+                 0x2b509b66eb35c512ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 30,             \
+                 0x56a136cdd66b8a24ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 31,             \
+                 0xad426d9bacd71448ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 32,             \
+                 0x5a84db3759ae2891ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 33,             \
+                 0xb509b66eb35c5122ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 34,             \
+                 0x6a136cdd66b8a245ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 35,             \
+                 0xd426d9bacd71448aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 36,             \
+                 0xa84db3759ae28915ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 37,             \
+                 0x509b66eb35c5122bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 38,             \
+                 0xa136cdd66b8a2456ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 39,             \
+                 0x426d9bacd71448adULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 40,             \
+                 0x84db3759ae28915aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 41,             \
+                 0x09b66eb35c5122b5ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 42,             \
+                 0x136cdd66b8a2456aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 43,             \
+                 0x26d9bacd71448ad4ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 44,             \
+                 0x4db3759ae28915a8ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 45,             \
+                 0x9b66eb35c5122b50ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 46,             \
+                 0x36cdd66b8a2456a1ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 47,             \
+                 0x6d9bacd71448ad42ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 48,             \
+                 0xdb3759ae28915a84ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 49,             \
+                 0xb66eb35c5122b509ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 50,             \
+                 0x6cdd66b8a2456a13ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 51,             \
+                 0xd9bacd71448ad426ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 52,             \
+                 0xb3759ae28915a84dULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 53,             \
+                 0x66eb35c5122b509bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 54,             \
+                 0xcdd66b8a2456a136ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 55,             \
+                 0x9bacd71448ad426dULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 56,             \
+                 0x3759ae28915a84dbULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 57,             \
+                 0x6eb35c5122b509b6ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 58,             \
+                 0xdd66b8a2456a136cULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 59,             \
+                 0xbacd71448ad426d9ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 60,             \
+                 0x759ae28915a84db3ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 61,             \
+                 0xeb35c5122b509b66ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 62,             \
+                 0xd66b8a2456a136cdULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 63,             \
+                 0xacd71448ad426d9bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 64,             \
+                 0x59ae28915a84db37ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 65,             \
+                 0xb35c5122b509b66eULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 66,             \
+                 0x66b8a2456a136cddULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 67,             \
+                 0xcd71448ad426d9baULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 68,             \
+                 0x9ae28915a84db375ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 69,             \
+                 0x35c5122b509b66ebULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 70,             \
+                 0x6b8a2456a136cdd6ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 71,             \
+                 0xd71448ad426d9bacULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 72,             \
+                 0xae28915a84db3759ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 73,             \
+                 0x5c5122b509b66eb3ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 74,             \
+                 0xb8a2456a136cdd66ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 75,             \
+                 0x71448ad426d9bacdULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 76,             \
+                 0xe28915a84db3759aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 77,             \
+                 0xc5122b509b66eb35ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 78,             \
+                 0x8a2456a136cdd66bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 79,             \
+                 0x1448ad426d9bacd7ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 80,             \
+                 0x28915a84db3759aeULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 81,             \
+                 0x5122b509b66eb35cULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 82,             \
+                 0xa2456a136cdd66b8ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 83,             \
+                 0x448ad426d9bacd71ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 84,             \
+                 0x8915a84db3759ae2ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 85,             \
+                 0x122b509b66eb35c5ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 86,             \
+                 0x2456a136cdd66b8aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 87,             \
+                 0x48ad426d9bacd714ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 88,             \
+                 0x915a84db3759ae28ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 89,             \
+                 0x22b509b66eb35c51ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 90,             \
+                 0x456a136cdd66b8a2ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 91,             \
+                 0x8ad426d9bacd7144ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 92,             \
+                 0x15a84db3759ae289ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 93,             \
+                 0x2b509b66eb35c512ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 94,             \
+                 0x56a136cdd66b8a24ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 95,             \
+                 0xad426d9bacd71448ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 96,             \
+                 0x5a84db3759ae2891ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 97,             \
+                 0xb509b66eb35c5122ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 98,             \
+                 0x6a136cdd66b8a245ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 99,             \
+                 0xd426d9bacd71448aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 100,            \
+                 0xa84db3759ae28915ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 101,            \
+                 0x509b66eb35c5122bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 102,            \
+                 0xa136cdd66b8a2456ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 103,            \
+                 0x426d9bacd71448adULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 104,            \
+                 0x84db3759ae28915aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 105,            \
+                 0x09b66eb35c5122b5ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 106,            \
+                 0x136cdd66b8a2456aULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 107,            \
+                 0x26d9bacd71448ad4ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 108,            \
+                 0x4db3759ae28915a8ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 109,            \
+                 0x9b66eb35c5122b50ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 110,            \
+                 0x36cdd66b8a2456a1ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 111,            \
+                 0x6d9bacd71448ad42ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 112,            \
+                 0xdb3759ae28915a84ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 113,            \
+                 0xb66eb35c5122b509ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 114,            \
+                 0x6cdd66b8a2456a13ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 115,            \
+                 0xd9bacd71448ad426ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 116,            \
+                 0xb3759ae28915a84dULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 117,            \
+                 0x66eb35c5122b509bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 118,            \
+                 0xcdd66b8a2456a136ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 119,            \
+                 0x9bacd71448ad426dULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 120,            \
+                 0x3759ae28915a84dbULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 121,            \
+                 0x6eb35c5122b509b6ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 122,            \
+                 0xdd66b8a2456a136cULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 123,            \
+                 0xbacd71448ad426d9ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 124,            \
+                 0x759ae28915a84db3ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 125,            \
+                 0xeb35c5122b509b66ULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 126,            \
+                 0xd66b8a2456a136cdULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 127,            \
+                 0xacd71448ad426d9bULL);                                \
+      TEST_CASE (type, function, 0x59ae28915a84db37ULL, 128,            \
+                 0x59ae28915a84db37ULL);                                \
+    }                                                                   \
+  while (false)
+
+static void
+test_stdc_rotate_left_ul (void)
+{
+  if (sizeof 0ul < sizeof 0ull)
+    TEST_CASES_32 (unsigned long int, stdc_rotate_left_ul);
+  else
+    TEST_CASES_64 (unsigned long long int, stdc_rotate_left_ul);
+}
+
+static void
+test_stdc_rotate_left_ull (void)
+{
+  TEST_CASES_64 (unsigned long long int, stdc_rotate_left_ull);
+}
+
+static int
+do_test (void)
+{
+  test_stdc_rotate_left_uc ();
+  test_stdc_rotate_left_us ();
+  test_stdc_rotate_left_ui ();
+  test_stdc_rotate_left_ul ();
+  test_stdc_rotate_left_ull ();
+  return 0;
+}
+
+#include <support/test-driver.c>