Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1we7jU-004Zol-2E for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 08:52:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1we7jT-0026AK-1p for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 08:52:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1we7jS-0026AC-2d for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 08:52:47 +0000 Received: from fout-a4-smtp.messagingengine.com ([103.168.172.147]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1we7jP-00000000lDZ-3Nok for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 08:52:46 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfout.phl.internal (Postfix) with ESMTP id 9ADB0EC010D; Mon, 29 Jun 2026 04:52:41 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Mon, 29 Jun 2026 04:52:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1782723161; x= 1782809561; bh=rNjpnGkpANjcr4+rzkAKH3Vg/cMH9lzulnkiTkyBpRU=; b=E cnTvRv5BAWeEzfa2cZMQ2/0FhnWlSGNIKSkbMAvcOvi8uhJY4NZMNQXvwQyw4JDI DFVzJ+vJrbl0Q04kbR7tNNnxEn+sBAeNOhuzqG68ir8O+ecIbqlVlTMfdJIaBmVG m4JffhkMuiiD2qKGH6cFhcx5o05YcZWYPQ9ZETIL95Xhq6+V0OP4LWDXzoWWF39o 5doGsm2tVGqOF+9kzqQRsGYxXZ/0MsgqwKaDbk+0SbP1Bg26NIYcueFi7ggcJZLL cdZSRRy/NbgM/23vpS+wLELnalKjUfQbvNJXZL5WbufNiz45iAshWaO1tPYLuh2C ScNl6c6WokUSzMAsBpCYw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1782723161; x=1782809561; bh=rNjpnGkpANjcr4+rzkAKH3Vg/cMH9lzulnk iTkyBpRU=; b=buFqZ/THqnOb0YtIjQA6VPPTx8RGXV/m8s2xKNorY+oQs/y6P7o a4mo/y3ajsIIuCQv78opnNBXFIvjHyvDWjJX7ODtAuQewHuGYaxBagWJaHzRQgpE L+QOtXkUQRkkBeR1k58uqvC2T0gD21HrX3+k/b4qkTd7DNICuqJ47e6lLXEKdttT kI2PgTobnAWC/eL/NsN2KxZq95gmRg7Qb5DO5KS9VjeZGr0E+z8hPMazg6Iz5hiC z8s4ul3TKqdovw4xKDkMRv0YU3YKf1TWL5clesI7cYHmg7WzEFQjS+NxRJhylJDx VSkdNfg1o4KS9MFcDjoOnjWnBy51l/r5xjw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGy6SiOE5WAcUvvfujIlm0QjlptarBHyaSGbMPaMiP2DJ/KP7yGzGzSgVc+DJjBm8 b/VlevMhye/Pug/hpupCgb18O0jwyFUW5XAq4ZnD3JGLxUZFSE2wb/z7dBEvKTnrv2deOu VPgWsCQdkOeHtOxzHX0c7fgYS0TXKPsBiS1WVUNOn8nhXYIBWpsncn6VXqBHPGAke5l5P3 d+WHVQuizL6kBMMTXM1gn4dt/1tcN/GLC1mzvHt2FavPLERkqF2OyfHZw8yhE6Rzhw5Ngh MS5InF2XaXsVB4JFJyoRkuSw0r5aIXP89xjPDgod827984wFu6PIXfrWIe6rSQ1+urm0UW KZWjJgDHdptcWpr23jbVabDyBUqDNPjnuENpSI9ctQeZKdcBj2oVdCHaChqPcyFvcLKFj6 oNfO6WA2r9vGgzaNeVmrZleGHtKq2/LlHpELvqm4Z2cIVljSRQCO4EEpYUR+9Sd67R7aXW +a6HdJBGcYOpLY8uV/JUxdmZTJfvkLGfh7PqcavqmZiwHd4MwP+RJlsVNx43hihUhVHbNX dG4QyB3e8oiui82dWovM9xse8ONPEDRuqBbEJraqUJAD1ntOirq9eS6mwkepaBOlmjBv9c hQVhUdHIw5AXBL/AkFymApivwLhUg5RT7F/My0nnY47CZsbYl5jxOM+e0r0g X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 29 Jun 2026 04:52:40 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------dGHl6l6nybtnp7mOt09YOfAA" Message-ID: Date: Mon, 29 Jun 2026 10:52:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: vectorized CRC on ARM64 To: John Naylor , Nathan Bossart Cc: PostgreSQL Hackers References: Content-Language: en-US From: Peter Eisentraut In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------dGHl6l6nybtnp7mOt09YOfAA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit It looks like this patch was developed concurrently with the switch from pg_attribute_aligned to C11 standard alignas, and it ended up being committed with the "old" style. I propose the attached patch to update that. It's only a stylistic change, but good for consistency and as an example for future code. On 03.04.26 10:22, John Naylor wrote: > On Thu, Apr 2, 2026 at 11:17 PM Nathan Bossart wrote: >> >> On Thu, Apr 02, 2026 at 10:53:24AM -0500, Nathan Bossart wrote: >>> I think the new pg_comp_crc32_choose() is infinitely recursing on macOS >>> because USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK is not defined but >>> pg_crc32c_armv8_available() returns false. If I trace through that >>> function, I see that it's going straight to the >>> >>> #else >>> return false; >>> #endif >>> >>> at the end. And sure enough, both HAVE_ELF_AUX_INFO and HAVE_GETAUXVAL > > Ah of course. > >>> aren't defined in pg_config.h. I think we might need to use sysctlbyname() >>> to determine PMULL support on macOS, but at this stage of the development >>> cycle, I would probably lean towards just compiling in the sb8 >>> implementation. >> >> Hm. On second thought, that probably regresses macOS builds because it was >> presumably using the armv8 path without runtime checks before... > > I went with the following for v5, and it passes MacOS on my Github CI: > > + /* set fallbacks */ > +#ifdef USE_ARMV8_CRC32C > + /* On e.g. MacOS, our runtime feature detection doesn't work */ > + pg_comp_crc32c = pg_comp_crc32c_armv8; > +#else > + pg_comp_crc32c = pg_comp_crc32c_sb8; > +#endif > + [...crc and pmull checks] > > That should keep scalar hardware support working, but now it'll only > use direct calls for constant inputs. > > I also did some benchmarking on an ARM Neoverse N1 / gcc 8.3 > (attached). There the vector loop still works well all the way down to > the minimum input size of 64 bytes, and on long inputs it's almost > twice as fast as scalar. For reproduceability, I slightly modified the > benchmark we used last year, to make sure the input is aligned > (attached but not for CI). In the end, I want to add a length check so > that inputs smaller than 80 bytes go straight to the scalar path. > Above 80, after alignment adjustments in the preamble, that still > guarantees at least one loop iteration in the vector path. > > -- > John Naylor > Amazon Web Services --------------dGHl6l6nybtnp7mOt09YOfAA Content-Type: text/plain; charset=UTF-8; name="0001-Use-C11-alignas-instead-of-pg_attribute_aligned.patch" Content-Disposition: attachment; filename*0="0001-Use-C11-alignas-instead-of-pg_attribute_aligned.patch" Content-Transfer-Encoding: base64 RnJvbSBkZTJjNjQ5ODU2NjJlMGE3ODhkYTVhNGVkOWY0ZTczNThlZDU0NGY0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyOSBKdW4gMjAyNiAxMDo0Njo1MSArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIFVzZSBDMTEgYWxpZ25hcyBpbnN0ZWFkIG9mIHBnX2F0dHJpYnV0ZV9hbGln bmVkCgpSZXBsYWNlIHBnX2F0dHJpYnV0ZV9hbGlnbmVkIHdpdGggQzExIGFsaWduYXMsIGZv ciBjb25zaXN0ZW5jeSB3aXRoCmN1cnJlbnQgY29udmVudGlvbnMuCgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBTldDQVphS2hFK1JENUtLb3VVRm94eDFFYlVOck5oY2R1 TTFWUT1Ea1NEYWRORUZuZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9wb3J0L3BnX2NyYzMy Y19hcm12OC5jIHwgNiArKystLS0KIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyks IDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvcGdfY3JjMzJjX2FybXY4 LmMgYi9zcmMvcG9ydC9wZ19jcmMzMmNfYXJtdjguYwppbmRleCA4Y2Y4MzhhNTEwYS4uOGZh ZDJmODNjMjQgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L3BnX2NyYzMyY19hcm12OC5jCisrKyBi L3NyYy9wb3J0L3BnX2NyYzMyY19hcm12OC5jCkBAIC0xNjYsNyArMTY2LDcgQEAgcGdfY29t cF9jcmMzMmNfcG11bGwocGdfY3JjMzJjIGNyYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGxlbikKIAkJdWludDY0eDJfdAlrOwogCiAJCXsKLQkJCXN0YXRpYyBjb25zdCB1aW50NjRf dCBwZ19hdHRyaWJ1dGVfYWxpZ25lZCgxNikga19bXSA9IHsweDc0MGVlZjAyLCAweDllNGFk ZGY4fTsKKwkJCXN0YXRpYyBjb25zdCBhbGlnbmFzKDE2KSB1aW50NjRfdCBrX1tdID0gezB4 NzQwZWVmMDIsIDB4OWU0YWRkZjh9OwogCiAJCQlrID0gdmxkMXFfdTY0KGtfKTsKIAkJfQpA QCAtMTkyLDE0ICsxOTIsMTQgQEAgcGdfY29tcF9jcmMzMmNfcG11bGwocGdfY3JjMzJjIGNy YywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIAogCQkvKiBSZWR1Y2UgeDAgLi4u IHgzIHRvIGp1c3QgeDAuICovCiAJCXsKLQkJCXN0YXRpYyBjb25zdCB1aW50NjRfdCBwZ19h dHRyaWJ1dGVfYWxpZ25lZCgxNikga19bXSA9IHsweGYyMGMwZGZlLCAweDQ5M2M3ZDI3fTsK KwkJCXN0YXRpYyBjb25zdCBhbGlnbmFzKDE2KSB1aW50NjRfdCBrX1tdID0gezB4ZjIwYzBk ZmUsIDB4NDkzYzdkMjd9OwogCiAJCQlrID0gdmxkMXFfdTY0KGtfKTsKIAkJfQogCQl5MCA9 IGNsbXVsX2xvX2UoeDAsIGssIHgxKSwgeDAgPSBjbG11bF9oaV9lKHgwLCBrLCB5MCk7CiAJ CXkyID0gY2xtdWxfbG9fZSh4MiwgaywgeDMpLCB4MiA9IGNsbXVsX2hpX2UoeDIsIGssIHky KTsKIAkJewotCQkJc3RhdGljIGNvbnN0IHVpbnQ2NF90IHBnX2F0dHJpYnV0ZV9hbGlnbmVk KDE2KSBrX1tdID0gezB4M2RhNmQwY2IsIDB4YmE0ZmMyOGV9OworCQkJc3RhdGljIGNvbnN0 IGFsaWduYXMoMTYpIHVpbnQ2NF90IGtfW10gPSB7MHgzZGE2ZDBjYiwgMHhiYTRmYzI4ZX07 CiAKIAkJCWsgPSB2bGQxcV91NjQoa18pOwogCQl9Ci0tIAoyLjU0LjAKCg== --------------dGHl6l6nybtnp7mOt09YOfAA--