From nobody Mon Sep 11 10:00:31 2023 X-Original-To: freebsd-bugs@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Rkj361qZJz4sv25 for ; Mon, 11 Sep 2023 10:03:30 +0000 (UTC) (envelope-from tirtajames45@gmail.com) Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Rkj352Dh8z4c9H for ; Mon, 11 Sep 2023 10:03:29 +0000 (UTC) (envelope-from tirtajames45@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20221208 header.b=fSCEUHrU; spf=pass (mx1.freebsd.org: domain of tirtajames45@gmail.com designates 2607:f8b0:4864:20::102c as permitted sender) smtp.mailfrom=tirtajames45@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-273dfceb3easo1708033a91.0 for ; Mon, 11 Sep 2023 03:03:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694426607; x=1695031407; darn=freebsd.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Ud5KPJNmLGrPom9WFEzGj+apqJnNkfUcSXfqqthq5mc=; b=fSCEUHrUMNlol1imwb6jnVe5GtPl5lVlEpu9IRU7JWmU1xj5vKiwnx3GZ8yPd+w4BK jn5cyDASCWPvGYUMep7CDxFX4FJIyag0wKUxxA5C7PLvgzJa20JOuW3coyjV7wEIi+fR DD3kFIyB46iu86YeBdi/et6BhUVQkQ++z7M4ccPlLCFGei8G9SrdVbJGAkcNKl/smcFM BoE+Ri5zcoVq8YJFBspebNnS1tz7fk6nD7PlUycKQdx8D58GzjFJl3hsi3B14Igo6d+r YDUX4nf1qAH+2/PCKjl951C477cWsRPWblRqdI5Ys2lnKMbNGUN1BR9BwxOKEwalULyA joKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694426607; x=1695031407; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Ud5KPJNmLGrPom9WFEzGj+apqJnNkfUcSXfqqthq5mc=; b=uGpfICZqUEZwWIE2bksqr38kKrpZQomnBWF9CXP5jqUXNT3C0CX0A4nepRCnhqoNPs fC3mE5pqbD3qdbeP/3vfTHAiUws1ZmpLSfenoBeYEHhQZWZUjCIm3+GZn/671U7IhT9d RrcQlgysWbKLj7ieP/zk/7nezBJNRn6m/0K+vew+1tMa88QKR6t1B00TH0Iz4T/YSQBS 1ctRjU4TzpCehEU/F4usGvEQHbOiglpQbpwL7lTpzTbN3wGjPzb5EQdB+mRXaBnb0Asn Zm6rm9DM+Wdb8UuSiIeGCfPH/lC4FfS2cL1n/qDlNaV92ptreOBmzdlloYbUnLvRpMfJ Cyag== X-Gm-Message-State: AOJu0YzSANIqbBJhielB+pJOmxknfBzxi7uJlTEBfZlOz9QzHuqx5ATs Fk+bYQCBicWzJ9yLVrt97KK/pa7GHp5DhP6t X-Google-Smtp-Source: AGHT+IEdPBaUqY4hLM4TTofURg9TsRtQrbOdm0GSOiR00y7EKg6SamlYrXuqb2fdESHI6RKZjONOog== X-Received: by 2002:a17:90a:df8a:b0:26b:13b7:22f9 with SMTP id p10-20020a17090adf8a00b0026b13b722f9mr6560499pjv.22.1694426607254; Mon, 11 Sep 2023 03:03:27 -0700 (PDT) Received: from localhost.localdomain ([2001:448a:20a0:a675:eb19:bb7d:dbab:9c84]) by smtp.gmail.com with ESMTPSA id gq1-20020a17090b104100b002639c4f81cesm7150606pjb.3.2023.09.11.03.03.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 03:03:26 -0700 (PDT) From: James Tirta Halim To: freebsd-bugs@FreeBSD.org Cc: James Tirta Halim Subject: [PATCH] memchr: scan word at a time when not on __GNUC__ Date: Mon, 11 Sep 2023 17:00:31 +0700 Message-ID: <20230911100031.2127316-1-tirtajames45@gmail.com> X-Mailer: git-send-email 2.42.0 List-Id: Bug reports List-Archive: https://lists.freebsd.org/archives/freebsd-bugs List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-bugs@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.50 / 15.00]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20221208]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4000::/36]; MIME_GOOD(-0.10)[text/plain]; FROM_HAS_DN(0.00)[]; MLMMJ_DEST(0.00)[freebsd-bugs@freebsd.org]; PREVIOUSLY_DELIVERED(0.00)[freebsd-bugs@freebsd.org]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::102c:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; BLOCKLISTDE_FAIL(0.00)[2001:448a:20a0:a675:eb19:bb7d:dbab:9c84:server fail,2607:f8b0:4864:20::102c:server fail]; RCVD_VIA_SMTP_AUTH(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; FREEMAIL_CC(0.00)[gmail.com]; DKIM_TRACE(0.00)[gmail.com:+]; RCPT_COUNT_TWO(0.00)[2]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; FREEMAIL_ENVFROM(0.00)[gmail.com]; RCVD_COUNT_TWO(0.00)[2] X-Rspamd-Queue-Id: 4Rkj352Dh8z4c9H --- lib/libc/string/memchr.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/libc/string/memchr.c b/lib/libc/string/memchr.c index 10df015c5b64..d83fb08f7221 100644 --- a/lib/libc/string/memchr.c +++ b/lib/libc/string/memchr.c @@ -26,6 +26,7 @@ #include #include #include +#ifndef __GNUC__ +#include +#endif #define SS (sizeof(size_t)) #define ALIGN (sizeof(size_t) - 1) @@ -33,25 +34,38 @@ #define HIGHS (ONES * (UCHAR_MAX / 2 + 1)) #define HASZERO(x) (((x)-ONES) & ~(x)&HIGHS) +#ifndef __GNUC__ +# if _BYTE_ORDER == _LITTLE_ENDIAN +# define TOWORD(x) ((word)x[7] << 56 | (word)x[6] << 48 | (word)x[5] << 40 | (word)x[4] << 32 | (word)x[3] << 24 | (word)x[2] << 16 | (word)x[1] << 8 | (word)x[0]) +# else +# define TOWORD(x) ((word)x[7] >> 56 | (word)x[6] >> 48 | (word)x[5] >> 40 | (word)x[4] >> 32 | (word)x[3] >> 24 | (word)x[2] >> 16 | (word)x[1] >> 8 | (word)x[0]) +# endif +#endif + void * memchr(const void *src, int c, size_t n) { const unsigned char *s = src; c = (unsigned char)c; -#ifdef __GNUC__ for (; ((uintptr_t)s & ALIGN) && n && *s != c; s++, n--) ; if (n && *s != c) { + size_t k = ONES * c; +#ifdef __GNUC__ typedef size_t __attribute__((__may_alias__)) word; const word *w; - size_t k = ONES * c; for (w = (const void *)s; n >= SS && !HASZERO(*w ^ k); w++, n -= SS) ; s = (const void *)w; - } +#else + typedef size_t word; + word w = TOWORD(s); + for (; n >= SS && !HASZERO(w ^ k); + w = TOWORD(s), s += SS, n -= SS) + ; #endif - for (; n && *s != c; s++, n--) - ; + } return n ? (void *)s : 0; } -- 2.42.0