From 8a904cbe7ab549f154aebce7fc367027ac884e51 Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Mon, 30 Dec 2013 21:12:29 +0100 Subject: [PATCH] Uses specific architecture defines. --- portable.h | 13 +++++++++++++ raid/combo.h | 7 ++----- raid/cpu.h | 27 ++++++++++++--------------- raid/gf.h | 3 --- raid/int.c | 3 --- raid/internal.h | 3 --- raid/intz.c | 3 --- raid/memory.c | 3 --- raid/memory.h | 3 --- raid/mktables.c | 10 ++-------- raid/module.c | 13 +++++-------- raid/raid.c | 3 --- raid/raid.h | 3 --- raid/sort.c | 3 --- raid/tables.c | 7 ++----- raid/test.c | 21 +++++++++------------ raid/test.h | 5 +---- raid/x86.c | 33 +++++++++++++++------------------ raid/x86z.c | 9 ++++----- 19 files changed, 65 insertions(+), 107 deletions(-) diff --git a/portable.h b/portable.h index eb5f311c..0e973e0c 100644 --- a/portable.h +++ b/portable.h @@ -31,6 +31,19 @@ #include #endif +/** + * Architecture. + */ +#if defined(__i386__) +#define CONFIG_X86 1 +#define CONFIG_X86_32 1 +#endif + +#if defined(__x86_64__) +#define CONFIG_X86 1 +#define CONFIG_X86_64 1 +#endif + /** * Includes some platform specific headers. */ diff --git a/raid/combo.h b/raid/combo.h index 566e191b..31530a20 100644 --- a/raid/combo.h +++ b/raid/combo.h @@ -10,13 +10,10 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ -#ifndef __COMBO_H -#define __COMBO_H +#ifndef __RAID_COMBO_H +#define __RAID_COMBO_H #include diff --git a/raid/cpu.h b/raid/cpu.h index 966055b2..5511e916 100644 --- a/raid/cpu.h +++ b/raid/cpu.h @@ -10,17 +10,14 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #ifndef __RAID_CPU_H #define __RAID_CPU_H -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 -static __always_inline void raid_cpuid(uint32_t func_eax, uint32_t sub_ecx, uint32_t *reg) +static inline void raid_cpuid(uint32_t func_eax, uint32_t sub_ecx, uint32_t *reg) { asm volatile( #if defined(__i386__) && defined(__PIC__) @@ -40,7 +37,7 @@ static __always_inline void raid_cpuid(uint32_t func_eax, uint32_t sub_ecx, uint #define CPU_VENDOR_MAX 13 -static __always_inline void raid_cpu_info(char *vendor, unsigned *family, unsigned *model) +static inline void raid_cpu_info(char *vendor, unsigned *family, unsigned *model) { uint32_t reg[4]; unsigned f, ef, m, em; @@ -73,7 +70,7 @@ static __always_inline void raid_cpu_info(char *vendor, unsigned *family, unsign } } -static __always_inline int raid_cpu_has_mmx(void) +static inline int raid_cpu_has_mmx(void) { uint32_t reg[4]; @@ -82,7 +79,7 @@ static __always_inline int raid_cpu_has_mmx(void) return (reg[3] >> 23) & 1; } -static __always_inline int raid_cpu_has_sse2(void) +static inline int raid_cpu_has_sse2(void) { uint32_t reg[4]; @@ -91,7 +88,7 @@ static __always_inline int raid_cpu_has_sse2(void) return (reg[3] >> 26) & 1; } -static __always_inline int raid_cpu_has_ssse3(void) +static inline int raid_cpu_has_ssse3(void) { uint32_t reg[4]; @@ -100,7 +97,7 @@ static __always_inline int raid_cpu_has_ssse3(void) return (reg[2] >> 9) & 1; } -static __always_inline int raid_cpu_has_sse42(void) +static inline int raid_cpu_has_sse42(void) { uint32_t reg[4]; @@ -109,7 +106,7 @@ static __always_inline int raid_cpu_has_sse42(void) return (reg[2] >> 20) & 1; } -static __always_inline int raid_cpu_has_avx(void) +static inline int raid_cpu_has_avx(void) { uint32_t reg[4]; @@ -118,7 +115,7 @@ static __always_inline int raid_cpu_has_avx(void) return (reg[2] >> 28) & 1; } -static __always_inline int raid_cpu_has_avx2(void) +static inline int raid_cpu_has_avx2(void) { uint32_t reg[4]; @@ -131,7 +128,7 @@ static __always_inline int raid_cpu_has_avx2(void) * Check if the processor has a slow MULT implementation. * If yes, it's better to use a hash not based on multiplication. */ -static __always_inline int raid_cpu_has_slowmult(void) +static inline int raid_cpu_has_slowmult(void) { char vendor[CPU_VENDOR_MAX]; unsigned family; @@ -169,7 +166,7 @@ static __always_inline int raid_cpu_has_slowmult(void) * Check if the processor has a slow PSHUFB implementation. * If yes, it's better to not use it. */ -static __always_inline int raid_cpu_has_slowpshufb(void) +static inline int raid_cpu_has_slowpshufb(void) { char vendor[CPU_VENDOR_MAX]; unsigned family; @@ -233,7 +230,7 @@ static __always_inline int raid_cpu_has_slowpshufb(void) * Check if the processor has a slow extended set of SSE registers. * If yes, it's better to unroll without using the second part of registers. */ -static __always_inline int raid_cpu_has_slowextendedreg(void) +static inline int raid_cpu_has_slowextendedreg(void) { char vendor[CPU_VENDOR_MAX]; unsigned family; diff --git a/raid/gf.h b/raid/gf.h index 818b9d13..63ee1179 100644 --- a/raid/gf.h +++ b/raid/gf.h @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #ifndef __RAID_GF_H diff --git a/raid/int.c b/raid/int.c index ab0aa904..10d7ff5f 100644 --- a/raid/int.c +++ b/raid/int.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" diff --git a/raid/internal.h b/raid/internal.h index 864f6e95..a7faa0ba 100644 --- a/raid/internal.h +++ b/raid/internal.h @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #ifndef __RAID_INTERNAL_H diff --git a/raid/intz.c b/raid/intz.c index 640037f9..42d18a9f 100644 --- a/raid/intz.c +++ b/raid/intz.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" diff --git a/raid/memory.c b/raid/memory.c index e65add7b..0cfceee5 100644 --- a/raid/memory.c +++ b/raid/memory.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" diff --git a/raid/memory.h b/raid/memory.h index 8f44548e..192fcca6 100644 --- a/raid/memory.h +++ b/raid/memory.h @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #ifndef __RAID_MEMORY_H diff --git a/raid/mktables.c b/raid/mktables.c index ae2beb47..0193d729 100644 --- a/raid/mktables.c +++ b/raid/mktables.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include @@ -192,9 +189,6 @@ int main(void) printf(" * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); printf(" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); printf(" * GNU General Public License for more details.\n"); - printf(" *\n"); - printf(" * You should have received a copy of the GNU General Public License\n"); - printf(" * along with this program. If not, see .\n"); printf(" */\n"); printf("\n"); @@ -319,7 +313,7 @@ int main(void) } printf("};\n\n"); - printf("#if defined(__i386__) || defined(__x86_64__)\n"); + printf("#ifdef CONFIG_X86\n"); printf("/**\n"); printf(" * PSHUFB tables for the Cauchy matrix.\n"); printf(" *\n"); @@ -351,7 +345,7 @@ int main(void) printf("};\n"); printf("#endif\n\n"); - printf("#if defined(__i386__) || defined(__x86_64__)\n"); + printf("#ifdef CONFIG_X86\n"); printf("/**\n"); printf(" * PSHUFB tables for generic multiplication.\n"); printf(" *\n"); diff --git a/raid/module.c b/raid/module.c index 6778eed7..5a19f195 100644 --- a/raid/module.c +++ b/raid/module.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" @@ -42,10 +39,10 @@ void raid_init(void) raid_rec_ptr[4] = raid_recX_int8; raid_rec_ptr[5] = raid_recX_int8; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_sse2()) { raid_par_ptr[0] = raid_par1_sse2; -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 if (raid_cpu_has_slowextendedreg()) { raid_par_ptr[1] = raid_par2_sse2; raid_parz_ptr = raid_parz_sse2; @@ -60,7 +57,7 @@ void raid_init(void) } if (raid_cpu_has_ssse3()) { -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 raid_par3_ptr = raid_par3_ssse3ext; raid_par_ptr[3] = raid_par4_ssse3ext; raid_par_ptr[4] = raid_par5_ssse3ext; @@ -102,7 +99,7 @@ static struct raid_func { { "int8", raid_rec2_int8 }, { "int8", raid_recX_int8 }, -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 { "sse2", raid_par1_sse2 }, { "sse2", raid_par2_sse2 }, { "sse2", raid_parz_sse2 }, @@ -115,7 +112,7 @@ static struct raid_func { { "ssse3", raid_recX_ssse3 }, #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 { "sse2e", raid_par2_sse2ext }, { "sse2e", raid_parz_sse2ext }, { "ssse3e", raid_par3_ssse3ext }, diff --git a/raid/raid.c b/raid/raid.c index b9e2b0f3..7fa54300 100644 --- a/raid/raid.c +++ b/raid/raid.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" diff --git a/raid/raid.h b/raid/raid.h index 1600fb26..3cbeeace 100644 --- a/raid/raid.h +++ b/raid/raid.h @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #ifndef __RAID_H diff --git a/raid/sort.c b/raid/sort.c index b41d5dea..8afac720 100644 --- a/raid/sort.c +++ b/raid/sort.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" diff --git a/raid/tables.c b/raid/tables.c index cb41a9c9..e58bb938 100644 --- a/raid/tables.c +++ b/raid/tables.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" @@ -9131,7 +9128,7 @@ const uint8_t __aligned(256) raid_gfcauchy[6][256] = }, }; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /** * PSHUFB tables for the Cauchy matrix. * @@ -13661,7 +13658,7 @@ const uint8_t __aligned(256) raid_gfcauchypshufb[251][4][2][16] = }; #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /** * PSHUFB tables for generic multiplication. * diff --git a/raid/test.c b/raid/test.c index 62a03ca2..b0404785 100644 --- a/raid/test.c +++ b/raid/test.c @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" @@ -160,19 +157,19 @@ int raid_test_rec(int mode, int nd, size_t size) mac[i] = 0; if (i == 0) { map[i][mac[i]++] = raid_rec1_int8; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_ssse3()) map[i][mac[i]++] = raid_rec1_ssse3; #endif } else if (i == 1) { map[i][mac[i]++] = raid_rec2_int8; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_ssse3()) map[i][mac[i]++] = raid_rec2_ssse3; #endif } else { map[i][mac[i]++] = raid_recX_int8; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_ssse3()) map[i][mac[i]++] = raid_recX_ssse3; #endif @@ -271,11 +268,11 @@ int raid_test_par(int mode, int nd, size_t size) map[mac++] = raid_par2_int32; map[mac++] = raid_par2_int64; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_sse2()) { map[mac++] = raid_par1_sse2; map[mac++] = raid_par2_sse2; -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 map[mac++] = raid_par2_sse2ext; #endif } @@ -287,13 +284,13 @@ int raid_test_par(int mode, int nd, size_t size) map[mac++] = raid_par5_int8; map[mac++] = raid_par6_int8; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_ssse3()) { map[mac++] = raid_par3_ssse3; map[mac++] = raid_par4_ssse3; map[mac++] = raid_par5_ssse3; map[mac++] = raid_par6_ssse3; -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 map[mac++] = raid_par3_ssse3ext; map[mac++] = raid_par4_ssse3ext; map[mac++] = raid_par5_ssse3ext; @@ -305,10 +302,10 @@ int raid_test_par(int mode, int nd, size_t size) map[mac++] = raid_parz_int32; map[mac++] = raid_parz_int64; -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 if (raid_cpu_has_sse2()) { map[mac++] = raid_parz_sse2; -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 map[mac++] = raid_parz_sse2ext; #endif } diff --git a/raid/test.h b/raid/test.h index 721c7e5a..372e70a1 100644 --- a/raid/test.h +++ b/raid/test.h @@ -10,9 +10,6 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #ifndef __RAID_TEST_H @@ -28,7 +25,7 @@ int raid_test_sort(void); /** - * Tests combinations functions. + * Tests combination functions. * * Tests combination_first() and combination_next() for all the parity levels. * diff --git a/raid/x86.c b/raid/x86.c index 471ece6d..2b87f38b 100644 --- a/raid/x86.c +++ b/raid/x86.c @@ -10,15 +10,12 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" #include "gf.h" -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * PAR1 (RAID5 with xor) SSE2 implementation * @@ -66,7 +63,7 @@ void raid_par1_sse2(int nd, size_t size, void **vv) } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 static const struct gfconst16 { uint8_t poly[16]; uint8_t low4[16]; @@ -76,7 +73,7 @@ static const struct gfconst16 { }; #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * PAR2 (RAID6 with powers of 2) SSE2 implementation */ @@ -130,7 +127,7 @@ void raid_par2_sse2(int nd, size_t size, void **vv) } #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 /* * PAR2 (RAID6 with powers of 2) SSE2 implementation * @@ -210,7 +207,7 @@ void raid_par2_sse2ext(int nd, size_t size, void **vv) } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * PAR3 (triple parity with Cauchy matrix) SSSE3 implementation */ @@ -307,7 +304,7 @@ void raid_par3_ssse3(int nd, size_t size, void **vv) } #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 /* * PAR3 (triple parity with Cauchy matrix) SSSE3 implementation * @@ -448,7 +445,7 @@ void raid_par3_ssse3ext(int nd, size_t size, void **vv) } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * PAR4 (quad parity with Cauchy matrix) SSSE3 implementation */ @@ -564,7 +561,7 @@ void raid_par4_ssse3(int nd, size_t size, void **vv) } #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 /* * PAR4 (quad parity with Cauchy matrix) SSSE3 implementation * @@ -737,7 +734,7 @@ void raid_par4_ssse3ext(int nd, size_t size, void **vv) } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * PAR5 (penta parity with Cauchy matrix) SSSE3 implementation */ @@ -878,7 +875,7 @@ void raid_par5_ssse3(int nd, size_t size, void **vv) } #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 /* * PAR5 (penta parity with Cauchy matrix) SSSE3 implementation * @@ -1011,7 +1008,7 @@ void raid_par5_ssse3ext(int nd, size_t size, void **vv) } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * PAR6 (hexa parity with Cauchy matrix) SSSE3 implementation */ @@ -1173,7 +1170,7 @@ void raid_par6_ssse3(int nd, size_t size, void **vv) } #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 /* * PAR6 (hexa parity with Cauchy matrix) SSSE3 implementation * @@ -1323,7 +1320,7 @@ void raid_par6_ssse3ext(int nd, size_t size, void **vv) } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * RAID recovering for one disk SSSE3 implementation */ @@ -1382,7 +1379,7 @@ void raid_rec1_ssse3(int nr, const int *id, const int *ip, int nd, size_t size, } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * RAID recovering for two disks SSSE3 implementation */ @@ -1488,7 +1485,7 @@ void raid_rec2_ssse3(int nr, const int *id, const int *ip, int nd, size_t size, } #endif -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 /* * RAID recovering SSSE3 implementation */ diff --git a/raid/x86z.c b/raid/x86z.c index f883846c..b3c4207a 100644 --- a/raid/x86z.c +++ b/raid/x86z.c @@ -10,14 +10,11 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ #include "internal.h" -#if defined(__i386__) || defined(__x86_64__) +#ifdef CONFIG_X86 static const struct gfzconst16 { uint8_t poly[16]; uint8_t half[16]; @@ -27,7 +24,9 @@ static const struct gfzconst16 { { 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e }, { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f } }; +#endif +#ifdef CONFIG_X86 /* * PARz (triple parity with powers of 2^-1) SSE2 implementation */ @@ -85,7 +84,7 @@ void raid_parz_sse2(int nd, size_t size, void **vv) } #endif -#if defined(__x86_64__) +#ifdef CONFIG_X86_64 /* * PARz (triple parity with powers of 2^-1) SSE2 implementation *