From: Mika Lindqvist Date: Fri, 9 Jun 2023 19:03:18 +0000 (+0300) Subject: Fix for PowerPC64 little-endian. X-Git-Tag: 2.1.3~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5ab5890a89860a7f4115fca9b0fc7c778b26ef1;p=thirdparty%2Fzlib-ng.git Fix for PowerPC64 little-endian. --- diff --git a/arch/power/adler32_vmx.c b/arch/power/adler32_vmx.c index ef1649b58..3470c28a1 100644 --- a/arch/power/adler32_vmx.c +++ b/arch/power/adler32_vmx.c @@ -1,6 +1,6 @@ /* adler32_vmx.c -- compute the Adler-32 checksum of a data stream * Copyright (C) 1995-2011 Mark Adler - * Copyright (C) 2017-2021 Mika T. Lindqvist + * Copyright (C) 2017-2023 Mika T. Lindqvist * Copyright (C) 2021 Adam Stylinski * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,6 +8,7 @@ #ifdef PPC_VMX #include #include "zbuild.h" +#include "zendian.h" #include "adler32_p.h" #define vmx_zero() (vec_splat_u32(0)) @@ -34,7 +35,11 @@ static void vmx_accum32(uint32_t *s, const uint8_t *buf, size_t len) { vector unsigned int adacc, s2acc; vector unsigned int pair_vec = vec_ld(0, s); adacc = vec_perm(pair_vec, pair_vec, s0_perm); +#if BYTE_ORDER == LITTLE_ENDIAN + s2acc = vec_sro(pair_vec, shift_vec); +#else s2acc = vec_slo(pair_vec, shift_vec); +#endif vector unsigned int zero = vmx_zero(); vector unsigned int s3acc = zero; diff --git a/arch/power/compare256_power9.c b/arch/power/compare256_power9.c index 9b3e61701..be094350f 100644 --- a/arch/power/compare256_power9.c +++ b/arch/power/compare256_power9.c @@ -10,7 +10,7 @@ /* Older versions of GCC misimplemented semantics for these bit counting builtins. * https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=3f30f2d1dbb3228b8468b26239fe60c2974ce2ac */ -#if defined(__GNUC__) && (__GNUC__ < 12) +#if defined(__GNUC__) && (__GNUC__ < 13) # define zng_vec_vctzlsbb(vc, len) __asm__ volatile("vctzlsbb %0, %1\n\t" : "=r" (len) : "v" (vc)) # define zng_vec_vclzlsbb(vc, len) __asm__ volatile("vclzlsbb %0, %1\n\t" : "=r" (len) : "v" (vc)) #else