Re: Use __attribute__((target(sse4.2))) for SSE42 CRC32C - Mailing list pgsql-hackers

From Nathan Bossart
Subject Re: Use __attribute__((target(sse4.2))) for SSE42 CRC32C
Date
Msg-id Zy0qg7cnI3uMr-qn@nathan
Whole thread Raw
Responses RE: Use __attribute__((target(sse4.2))) for SSE42 CRC32C
List pgsql-hackers
+    __attribute__((target("sse4.2")))

These need to be surrounded with

    #if defined(__has_attribute) && __has_attribute (target)

so that we still attempt the check on compilers that don't support it
(e.g., MSVC).

 # Check for Intel SSE 4.2 intrinsics to do CRC calculations.
 #
-# First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
-# with the default compiler flags. If not, check if adding the -msse4.2
-# flag helps. CFLAGS_CRC is set to -msse4.2 if that's required.
+# Check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
+# with the __attribute__((target("sse4.2"))).
 PGAC_SSE42_CRC32_INTRINSICS([])
-if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then
-  PGAC_SSE42_CRC32_INTRINSICS([-msse4.2])
-fi

IIUC this means we will never set USE_SSE42_CRC32C_WITH_RUNTIME_CHECK.  To
maintain the existing behavior, I think we need to still perform two
configure tests (one with __attribute__((target(...))) and another
without), and then we can choose whether to set USE_SSE42_CRC32C or
USE_SSE42_CRC32C_WITH_RUNTIME_CHECK based on the results.

+  'pg_crc32c_sse42_choose.c',
+  'pg_crc32c_sse42.c',

Can we combine these?

-- 
nathan



pgsql-hackers by date:

Previous
From: "Devulapalli, Raghuveer"
Date:
Subject: RE: Proposal for Updating CRC32C with AVX-512 Algorithm.
Next
From: Tom Lane
Date:
Subject: Re: magical eref alias names