From: Uros Bizjak Date: Wed, 6 May 2026 14:35:54 +0000 (+0200) Subject: stdlib: Add internal stdc_rotate_left implementation X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7623844a710fcd483a4d8fbc99a901977cf76b8;p=thirdparty%2Fglibc.git stdlib: Add internal stdc_rotate_left implementation It follows the C2y N3367 proposed interface, along with some tests imported from gnulib (and adapted to glibc libsupport). Signed-off-by: Uros Bizjak Reviewed-by: Adhemerval Zanella --- 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 +# 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 + . */ + +#include +#include + +#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