From patchwork Wed May 6 18:42:38 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 134581 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2F2CF4BA2E1F for ; Wed, 6 May 2026 18:49:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2F2CF4BA2E1F Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=RIBggC51 X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id E469C4BA23CF for ; Wed, 6 May 2026 18:45:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E469C4BA23CF Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E469C4BA23CF Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::335 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778093141; cv=none; b=KX4lPd2chgXC6G3PKgWx3YXpD8cUUwMXCyRO5uhkHsrNsX6QFV4P5qLTKZdixAYieiUlpe/sbrmUop0jjFZY4aruO/5RL+9s37uhmDpbuiDOU4VbJ0b45GAzPxecRJSppyNWvZR/n0T+gnueqboEbulndIyhQ8piP5ni7nXLc78= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778093141; c=relaxed/simple; bh=x3hI6QJSnjhUTmBfIwFnZe97rVcoRpZZyAE4dY97ZBQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=SyVnPEmYkrpu76KOYzAte9DyHnbWDHYlTUyhzNlU9mzzUj1ZeQ3gdkQEq3c9A91/zLHaYbfezA1KqFuxLxEbMruWSSQvTMR73ieTOq0+ePXFLjN+Sw6PJMO3GipJgYcngvW74qwQOWn5IrQ85x8CkEs7Q5T4vK/ZYXErbVEh6gA= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=RIBggC51 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E469C4BA23CF Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-48984d29fe3so228225e9.0 for ; Wed, 06 May 2026 11:45:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778093139; x=1778697939; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SDD0oQglvBJwteWKXlXU5JO8OrsOUMmBjnpQ2/e5tX4=; b=RIBggC51GQ/X2eJx1BT4AF/COXA1RR0bHe5eW8fuHz0YiZ+nCnrCuxa3Pz7ZX72c9c 8MuiD0PE+5Aayx6VAZvmfxW+W1w70vhOnSjM6+klBlgPBNmFPtiMxc5kxemFYRQMObwz EluOQzNChLbwPuFcpvaMBcfmGBx0C/WM/PhTDRF20jL9+gSsjpmcJUopqx+nJZkjmtoB kiH9nRu7oIBfHfVBmMIxGctgvoBGWIQ7+fc8P+cdD/slsniilh5XbCSqK4jdMRVnrlQ/ OMFo5oVOKdoy3rDFhq4qlFwQRMHaGZIyoOzdeYWicykpTGCxPWUL9BzMGR7ZJLQfi1tI YVXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778093139; x=1778697939; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=SDD0oQglvBJwteWKXlXU5JO8OrsOUMmBjnpQ2/e5tX4=; b=ox9BXUNV6p55Oi+I6WIQOAwgp/rTnlUdK8jIJw3L1dLtiXc/0fZTuQMq2Oy52msfrP GiEooyLMhwksaAIX3oX0NG3yuVKuEKLy5n0JiBjJhNaBYb9OdbV3g2hzgVHE24ly6A7D JhzbQUfuSv4XlzLKbgpD/loTNgXeIX9aw7QP233eXGRKkLL9m14U0QuH8Zm2uupqG+Yw BTgFwdB3BT+Izk0U8cQtSSTW1OZJ5qdamg4Uvpi1C372L6r7r6T2DwU6yKzH7sxa74Ae pvVaSxEIirtCg/gHf/vUKqrLVvkalIUMf0U7g0lRfVNcUW1S7rvrevr2Z4J6iOaPVs8t ELYw== X-Gm-Message-State: AOJu0Yw2kku29WA0E0BHG5NPlYrsZiU+Ur8/FzpVy+YPlcow4+RPGpp/ HVaVMNU2Yxl1nDe1jr99a0Yo3jWSPCAIRuYDvTYFD8/GLNyoCQ/38lQQ59txNHm2 X-Gm-Gg: AeBDievNVMYrggxA8vU/Ia+hSO9JBZIKBAf9D1n0U7fVF7n7V39VCM8jdBEoC4Jdnu7 PaviqEMK8JiCQZ3jNFJKGrQlrImKRGXYrBbmU4h+kvky4c+vjwZr7CHby7TuzBC1P8HubjiNI/+ zJevoE0gxzfwrGCLvP5cPy1Og7SroAJZQiDePhuGpWOyp41/EhfPhwPpW/5n9czcNfHN2O59Fbh eNqPftwPobRTOot3laqNGu+xW/KwpKOBymOnDt9Trrq0UJd3HJwBNzkuITu2Z/BwGjomfZDiLCr QMvRnqfHs0HzS+HJVn+GdTHFQkpFBQfV7BZu5yv9H2Eotd1mJtd0DnxMBUZgU6hh9VUMfNUrrk1 R3lDK+K6m7Z0BisaPwdbMuBeTJoukTVBPfZmbGJhG+noSnPlBkgzEZZjm0bTBO6fE+i0+qvzuiU bmsHWElA1eEmKswzKcOaSQfppA8ityzNHlyUWM/f7s90wJ8y20TyXesh6vqnh9Qr9Nqfl686knl Lo++Sq1XajTmhMnlWAlgosb9/Gs91OExENCL3fLWHV597P42wEcTYo= X-Received: by 2002:a05:600c:8906:b0:488:ffad:6728 with SMTP id 5b1f17b1804b1-48e51f46d7bmr60800285e9.19.1778093139090; Wed, 06 May 2026 11:45:39 -0700 (PDT) Received: from fedora ([46.248.82.114]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e538b26a3sm117365935e9.9.2026.05.06.11.45.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 11:45:38 -0700 (PDT) From: Uros Bizjak To: libc-alpha@sourceware.org Cc: Uros Bizjak , Adhemerval Zanella Subject: [PATCH 1/3] stdlib: Add internal stdc_rotate_left implementation Date: Wed, 6 May 2026 20:42:38 +0200 Message-ID: <20260506184522.3278011-2-ubizjak@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260506184522.3278011-1-ubizjak@gmail.com> References: <20260506184522.3278011-1-ubizjak@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org It follows the C2y N3367 proposed interface, along with some tests imported from gnulib (and adapted to glibc libsupport). Signed-off-by: Uros Bizjak Cc: Adhemerval Zanella --- 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 +# 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 From patchwork Wed May 6 18:42:39 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 134580 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E3FA44BA7997 for ; Wed, 6 May 2026 18:49:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E3FA44BA7997 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=Lph5QEti X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by sourceware.org (Postfix) with ESMTPS id 97E364BA23E7 for ; Wed, 6 May 2026 18:45:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 97E364BA23E7 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 97E364BA23E7 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778093141; cv=none; b=PcYkouWitQblf+srog1DpFYhGiKs5v7snI8tGyFwVgZ+uHWr45ayGKezZPmAMPne/CIsDl2iyV56BIl6GmrALO9wFPaMdEpFkahRwgYe1zIJHZUtxGYhxEXIkhv6g229vKWo0VCc9oPHhSExnQOYx/iT35swEuSyz78OolSzX3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778093141; c=relaxed/simple; bh=nD54wNEN0D6A3hH8zVs7k15S4n1tT2kGuQ3fkiQdTuw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=EcTPVPmJ6OkLL7hwrPGISojVPBxMKZ3ogMm7gti30os1EGvVbfxX4yQLcpFqe8eRWi0OqKIBeFEc1WyQ34vThJj73TmRewkBUgcw7vo4pIni54e2aEsk4utMcJd4XAvbD5IlSUan5sVWtoZmMdmiOq8mVRDpNFf0Z5yf4ZiARi8= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=Lph5QEti DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 97E364BA23E7 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-488b150559bso101875e9.1 for ; Wed, 06 May 2026 11:45:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778093140; x=1778697940; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5mu0zvHD07Vnf+QCDNEghL4OtVwPdnALhJtm7OV6AKY=; b=Lph5QEtilCSbmOudjP+E6uj1vApriWhtcDji6OVYclb0mwsVsOfRIxtg5CiMV9lNrC R/lhx45xNf1T34k6YlcpfcKi2lqQOjey4Hp/N5JfP3hi5H0XYyLWZ3ltWMaB8HC391xY djEjc3LTm+u5yJpJeYQkOSYB2RG4wkrBrP24/XrSXd3nMn33siWGlK5l8vCf25aGrcMX wvHCPF1o+yipM9b43PHW5nBf6+t04//W4JUbg6AvFJR1Px4rEgz6cVqtZkvbmjyoHCt9 TAh9zxON2oc7nAG5mR3lIy94IP0iQs3HuLlJRMO9w5hyVzJ7gVUXYpiSTs3+lM9o8B8X rcWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778093140; x=1778697940; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5mu0zvHD07Vnf+QCDNEghL4OtVwPdnALhJtm7OV6AKY=; b=sSL9u5sNAuHqX+Qhw0YMCuzagaqVjPeKAzBHQTX2PAnsgCzbnpLuC9oX9tZJTWbQTS n3TPyZfue9H5qkt//isOmnbcyR14BNr7xt0TwnmA978bTw11TBhNiDCVW7mCTr4yjFz+ TADXmPWJZVnfyRMJBglaxLdEFA7An11HtiilBf7shK97dMTI56lAyqLuUculuEZL9voL DfuglbC0hf1IQktgkfKW4fyvTaERs6sFX8/UrzW0Vd4CYWYHTZUoA4cruR2r1QuyOAJ4 b4P3FFSeijMcO1G8PQMxnGdeUVjzDjqMZbZ0dKnNGHGssiDXHMIXFW8/PsP4+eoby3zi 0VGg== X-Gm-Message-State: AOJu0Yxc7ZUhgqn5iHDaH6Qj/CjHwbA6LAH/fTHizYW6MGw3w2Hq1H3K aZeb+PKKcx7MvSvVd234WpmPGEv8HYvfHjp2P4CQqgrj3W60UMh10xtc3mjedrJZ X-Gm-Gg: AeBDieuFDlDgIkdlts5GLZ6vjz4ho+XJS0H0ZBxOPUD4HdV/K8hRS2Mt9Kad+VIaJPw 0mSIqTdYOB/kQfAPBbR2jdc9VJRFMg3REsMoEQMFHswKcf7kgiDwuNwMRYcQXpXjA40AXartn+h UdtYrkL0KW4er4iQUg2/xqO52kACWtqN7/Um3Muq5xiaE6QXlVcXlNt9uFQ+niov33M6J7hz1Yo KN3/2jqiwtO/wlNSjsot7W1fXUPGPYR2gOf6QWLt+2Hwj015m2bMfoFvkGjtYumkeCGgWYclTSw On/v/w6fMxyjv7Wzvct3V8DFPLz/poDNtsfA63Leem14pw4SgDBmGm8nCRiu/4OO9nRIrSHfWAh 66+E1hvEPp+CRky5t16F2USjMGugbOws15UEasmnySHX8xVjctoItiSggOBW+8sBmIeDRcdVr7l qZTu722Ntr4oTAi8MI7EeDYcqjZ3CxfAN4LQkD4Vxubm6gopi2iYQfF8oJiTdIZ/ZroAifPF2jc RlMZ78jm78gonUyRfT86sNMi5gQ9/3s6zdtO6Ie/oocejQQ5uQvqAI= X-Received: by 2002:a05:600c:4592:b0:489:1ff1:74d3 with SMTP id 5b1f17b1804b1-48e51f3c4cemr82207985e9.20.1778093139920; Wed, 06 May 2026 11:45:39 -0700 (PDT) Received: from fedora ([46.248.82.114]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e538b26a3sm117365935e9.9.2026.05.06.11.45.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 11:45:39 -0700 (PDT) From: Uros Bizjak To: libc-alpha@sourceware.org Cc: Uros Bizjak Subject: [PATCH 2/3] x86_64: Replace inline asm rotates in pointer_guard with stdc_rotate_{left, right} Date: Wed, 6 May 2026 20:42:39 +0200 Message-ID: <20260506184522.3278011-3-ubizjak@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260506184522.3278011-1-ubizjak@gmail.com> References: <20260506184522.3278011-1-ubizjak@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org Use the C23 rotation helpers instead of inline assembly for pointer mangling and demangling on x86_64. The PTR_MANGLE and PTR_DEMANGLE macros previously used rol/ror inline asm with a constant rotation of 2 * LP_SIZE + 1. Replace these with stdc_rotate_left and stdc_rotate_right operating on uintptr_t, preserving the exact rotation count via 2 * sizeof (uintptr_t) + 1. This change removes inline assembly, improves portability and readability and lets the compiler select optimal code generation. No functional change intended. Signed-off-by: Uros Bizjak --- sysdeps/unix/sysv/linux/x86_64/pointer_guard.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sysdeps/unix/sysv/linux/x86_64/pointer_guard.h b/sysdeps/unix/sysv/linux/x86_64/pointer_guard.h index 898a2dd3ed..4f7abc64f4 100644 --- a/sysdeps/unix/sysv/linux/x86_64/pointer_guard.h +++ b/sysdeps/unix/sysv/linux/x86_64/pointer_guard.h @@ -31,17 +31,20 @@ # define PTR_DEMANGLE(reg) ror $2*LP_SIZE+1, reg; \ xor __pointer_chk_guard_local(%rip), reg # else +# include # include extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; # define PTR_MANGLE(var) \ do { \ (var) = (__typeof (var)) ((uintptr_t) (var) \ ^ __pointer_chk_guard_local); \ - asm ("rol $2*" LP_SIZE "+1, %0" : "+r" (var)); \ + (var) = (__typeof (var)) stdc_rotate_left ((uintptr_t) (var), \ + 2 * sizeof (uintptr_t) + 1); \ } while (0) # define PTR_DEMANGLE(var) \ do { \ - asm ("ror $2*" LP_SIZE "+1, %0" : "+r" (var)); \ + (var) = (__typeof (var)) stdc_rotate_right ((uintptr_t) (var), \ + 2 * sizeof (uintptr_t) + 1); \ (var) = (__typeof (var)) ((uintptr_t) (var) \ ^ __pointer_chk_guard_local); \ } while (0) @@ -53,16 +56,19 @@ extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; # define PTR_DEMANGLE(reg) ror $2*LP_SIZE+1, reg; \ xor %fs:POINTER_GUARD, reg # else +# include # include # define PTR_MANGLE(var) \ do { \ (var) = (__typeof (var)) ((uintptr_t) (var) \ ^ ((tcbhead_t __seg_fs *)0)->pointer_guard); \ - asm ("rol $2*" LP_SIZE "+1, %0" : "+r" (var)); \ + (var) = (__typeof (var)) stdc_rotate_left ((uintptr_t) (var), \ + 2 * sizeof (uintptr_t) + 1); \ } while (0) # define PTR_DEMANGLE(var) \ do { \ - asm ("ror $2*" LP_SIZE "+1, %0" : "+r" (var)); \ + (var) = (__typeof (var)) stdc_rotate_right ((uintptr_t) (var), \ + 2 * sizeof (uintptr_t) + 1); \ (var) = (__typeof (var)) ((uintptr_t) (var) \ ^ ((tcbhead_t __seg_fs *)0)->pointer_guard); \ } while (0) From patchwork Wed May 6 18:42:40 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 134579 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E9D704BA23FF for ; Wed, 6 May 2026 18:46:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E9D704BA23FF Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=fyvySs6Y X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 21A914BA23F4 for ; Wed, 6 May 2026 18:45:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 21A914BA23F4 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 21A914BA23F4 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::330 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778093142; cv=none; b=nWfW0TuBy2xfWwmRO+GOqxb57QHGi1hJvq5XAJ6nSX6usDBwv3ft7Ixw9DWy1FJ+YK2sXEIgTrWVE881x3Ii+PCJlfMq1cNymMsMfOGwSqCDrUssHH4DfwKuG5NX8WYKyHnnLXWl68hkhXYmxEnAYjOAePjuBNDxCAFfcNdpRyo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778093142; c=relaxed/simple; bh=7e+lPmgy0Ghsitv7q5F4cA1ns+mAbWLIi6Ow9s2GLF0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=X9o8bkKzWCmgYsa6EPs7nl5uek2PSQWCEfj+7LEs28bVIxOf6rMthySMUvHEsbvayPp8kOqQ5XzgBqBXl7NWH198iezXk9Znt7Ksi+3WR+qj6MuxFj6SGzJXU1LsullQ9QnAPuf8PRSRQBoQe9+s3/NB5MtFIiUjKbc4qo5pNwE= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=fyvySs6Y DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 21A914BA23F4 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-488a8ca4aadso49175e9.3 for ; Wed, 06 May 2026 11:45:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778093141; x=1778697941; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V5AME+ebYTYJ05ZUOJUiPCJtHA/pCOUX8O4rl6GID7k=; b=fyvySs6YeMeyyDv6LQZ5Y3VXBqwQ0QLT4jvvWLB4YnN48xcdXPPPgh06ecz18j1PWP nI39qhMRn9hCo7Nv8sZ4QHKhsJ1/DjJgI9syQQsFebBXR913t7QP1SmTscwwKvXkG6sd KM3ffJh+J9ZVpGKQ/r8JPN90Q3YXv9IvCtrj7K8rwYVa7KAfOFNNQtzWp0+P6RkEiz/P EWwvMx96KVhlepukxMG+FaY7Fsoy302I7FQT5IvykPH6q990OWw+7m9en60HMnMciFBs iEnZFkkSawu/6KhvMKltFpu15HClIOS+qdDzqtNz2o5GscHwaT8LsLVFZlLcgJSu2Fsq M4fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778093141; x=1778697941; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=V5AME+ebYTYJ05ZUOJUiPCJtHA/pCOUX8O4rl6GID7k=; b=Hu+rT/MEXInmLjHowXXjDOLYinDsZfGJpApzWXCGTNEkTZ5zlo9TQ7flZ9EUD1ViA3 uKpwVCEjmMxOh9XJwyFGPpou9jK3mvuWBo497KTDQ8sByC8YGAUOQXNvaCb8/fljVG6Z C/qZWWFXK9Ng3OSyKPL9UH26jFNqDdCXcyvyofPYZtRJe4CIJaTi9KZ/uj2mr094ZQmO Liz7uqhw1NuRpvpMEnnCpcu3SNADd4ICS7KfZ84MLYOcGL3hyndtKQodDWHYRE2zBZ1N 4wXzoOE1V3kTv91OUqg1nyyu+Tn+R4+D2l/lxl6TgCfCh4p/di080mC70TbYIwkcBxnH aOHQ== X-Gm-Message-State: AOJu0Yzps2gdASTL3RpCu2t1XSrS7cv5f6zQchXMg+TxQz6GmLdd0tBl rzA4VG5X1UnJcmhyrq8DTmM8VruMzrjXnvnFRdenk+yUq/UCXXPuEEYj6K+svxgX X-Gm-Gg: AeBDiesehN98981fw//5NG/g/1vUg+9IeCrFarDz7i8rEYeSnAnhJXeM6WUvwMNywJF /Dk7JKWtay1kGLvJj5e3G4fgiVxy1jIyBc7yAIJAd2h38v8Kz40vEe/QfWpc7U+OT9xTg5shy3q zjLV2GZL1pRbUYToxLxOXZReAeTYb87N2/2etdJcJsmwxejSdFGpz5rjGKTZQIC39QNdWGbKNzN 85FTgAysmNEgkroCW576EsDbT+e9qpVDQiZ98CZgJAiChSlqGnjxPzb0y6I346ogzbu8VkpLxV1 IVwAEnMSG9ApZsLC/wNRhSibfWfVHdfRMTq5wNm+U9rAgl3raIJssbkipYZCVKJXwgfba4I2bZk EvzkD4yra5w4bGfIGf01r646/t6xEd8fqerxiqw7JjLkczGP9EhQlVyskqyZqQN8ElhxGxT7t9C D78d9O3k8SNiY4mu5wvadCW1Q+qKKLhK5lu7xU7vOkJNOCGa5ti3uuIc/Ne6N7mibrn14p5xH54 mIcYAbmyR16iVkJQqYqff1VbpJinLaN+CpsUU54OS3+iUgmkg92G27QwqD+0DIl9A== X-Received: by 2002:a05:600c:47d3:b0:48d:c0a:3813 with SMTP id 5b1f17b1804b1-48e51e0bb62mr49850785e9.3.1778093140599; Wed, 06 May 2026 11:45:40 -0700 (PDT) Received: from fedora ([46.248.82.114]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e538b26a3sm117365935e9.9.2026.05.06.11.45.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 11:45:40 -0700 (PDT) From: Uros Bizjak To: libc-alpha@sourceware.org Cc: Uros Bizjak Subject: [PATCH 3/3] i386: Replace inline asm rotates in pointer_guard with stdc_rotate_{left, right} Date: Wed, 6 May 2026 20:42:40 +0200 Message-ID: <20260506184522.3278011-4-ubizjak@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260506184522.3278011-1-ubizjak@gmail.com> References: <20260506184522.3278011-1-ubizjak@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org Use the C23 rotation helpers instead of inline assembly for pointer mangling and demangling on i386. The PTR_MANGLE and PTR_DEMANGLE macros previously used rol/ror inline asm with a constant rotation of 9. Replace these with stdc_rotate_left and stdc_rotate_right operating on uintptr_t, preserving the exact rotation count via 2 * sizeof (uintptr_t) + 1. This change removes inline assembly, improves portability and readability and lets the compiler select optimal code generation. No functional change intended. Signed-off-by: Uros Bizjak --- sysdeps/unix/sysv/linux/i386/pointer_guard.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sysdeps/unix/sysv/linux/i386/pointer_guard.h b/sysdeps/unix/sysv/linux/i386/pointer_guard.h index 7c142fb526..c8311be444 100644 --- a/sysdeps/unix/sysv/linux/i386/pointer_guard.h +++ b/sysdeps/unix/sysv/linux/i386/pointer_guard.h @@ -33,16 +33,19 @@ # define PTR_DEMANGLE(reg) rorl $9, reg; \ xorl %gs:POINTER_GUARD, reg # else +# include # include # define PTR_MANGLE(var) \ do { \ (var) = (__typeof (var)) ((uintptr_t) (var) \ ^ ((tcbhead_t __seg_gs *)0)->pointer_guard); \ - asm ("roll $9, %0" : "+r" (var)); \ + (var) = (__typeof (var)) stdc_rotate_left ((uintptr_t) (var), \ + 2 * sizeof (uintptr_t) + 1); \ } while (0) # define PTR_DEMANGLE(var) \ do { \ - asm ("rorl $9, %0" : "+r" (var)); \ + (var) = (__typeof (var)) stdc_rotate_right ((uintptr_t) (var), \ + 2 * sizeof (uintptr_t) + 1); \ (var) = (__typeof (var)) ((uintptr_t) (var) \ ^ ((tcbhead_t __seg_gs *)0)->pointer_guard); \ } while (0)