From e5ab5890a89860a7f4115fca9b0fc7c778b26ef1 Mon Sep 17 00:00:00 2001 From: Mika Lindqvist Date: Fri, 9 Jun 2023 22:03:18 +0300 Subject: [PATCH] Fix for PowerPC64 little-endian. --- arch/power/adler32_vmx.c | 7 ++++++- arch/power/compare256_power9.c | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/power/adler32_vmx.c b/arch/power/adler32_vmx.c index ef1649b5..3470c28a 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 9b3e6170..be094350 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 -- 2.47.3