diff options
Diffstat (limited to 'ffmpeg1/libavutil/ppc')
| -rw-r--r-- | ffmpeg1/libavutil/ppc/Makefile | 4 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/cpu.c | 83 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/float_dsp_altivec.c | 124 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/float_dsp_altivec.h | 38 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/float_dsp_init.c | 42 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/intreadwrite.h | 108 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/timer.h | 47 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/types_altivec.h | 47 | ||||
| -rw-r--r-- | ffmpeg1/libavutil/ppc/util_altivec.h | 118 |
9 files changed, 0 insertions, 611 deletions
diff --git a/ffmpeg1/libavutil/ppc/Makefile b/ffmpeg1/libavutil/ppc/Makefile deleted file mode 100644 index 4fd8d6d..0000000 --- a/ffmpeg1/libavutil/ppc/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -OBJS += ppc/cpu.o \ - ppc/float_dsp_init.o \ - -ALTIVEC-OBJS += ppc/float_dsp_altivec.o \ diff --git a/ffmpeg1/libavutil/ppc/cpu.c b/ffmpeg1/libavutil/ppc/cpu.c deleted file mode 100644 index 20837da..0000000 --- a/ffmpeg1/libavutil/ppc/cpu.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef __APPLE__ -#include <sys/sysctl.h> -#elif defined(__OpenBSD__) -#include <sys/param.h> -#include <sys/sysctl.h> -#include <machine/cpu.h> -#elif defined(__AMIGAOS4__) -#include <exec/exec.h> -#include <interfaces/exec.h> -#include <proto/exec.h> -#endif /* __APPLE__ */ - -#include "libavutil/cpu.h" -#include "config.h" - -/** - * This function MAY rely on signal() or fork() in order to make sure AltiVec - * is present. - */ -int ff_get_cpu_flags_ppc(void) -{ -#if HAVE_ALTIVEC -#ifdef __AMIGAOS4__ - ULONG result = 0; - extern struct ExecIFace *IExec; - - IExec->GetCPUInfoTags(GCIT_VectorUnit, &result, TAG_DONE); - if (result == VECTORTYPE_ALTIVEC) - return AV_CPU_FLAG_ALTIVEC; - return 0; -#elif defined(__APPLE__) || defined(__OpenBSD__) -#ifdef __OpenBSD__ - int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC}; -#else - int sels[2] = {CTL_HW, HW_VECTORUNIT}; -#endif - int has_vu = 0; - size_t len = sizeof(has_vu); - int err; - - err = sysctl(sels, 2, &has_vu, &len, NULL, 0); - - if (err == 0) - return has_vu ? AV_CPU_FLAG_ALTIVEC : 0; - return 0; -#elif CONFIG_RUNTIME_CPUDETECT && defined(__linux__) && !ARCH_PPC64 - int proc_ver; - // Support of mfspr PVR emulation added in Linux 2.6.17. - __asm__ volatile("mfspr %0, 287" : "=r" (proc_ver)); - proc_ver >>= 16; - if (proc_ver & 0x8000 || - proc_ver == 0x000c || - proc_ver == 0x0039 || proc_ver == 0x003c || - proc_ver == 0x0044 || proc_ver == 0x0045 || - proc_ver == 0x0070) - return AV_CPU_FLAG_ALTIVEC; - return 0; -#else - // Since we were compiled for AltiVec, just assume we have it - // until someone comes up with a proper way (not involving signal hacks). - return AV_CPU_FLAG_ALTIVEC; -#endif /* __AMIGAOS4__ */ -#endif /* HAVE_ALTIVEC */ - return 0; -} diff --git a/ffmpeg1/libavutil/ppc/float_dsp_altivec.c b/ffmpeg1/libavutil/ppc/float_dsp_altivec.c deleted file mode 100644 index 8cee82c..0000000 --- a/ffmpeg1/libavutil/ppc/float_dsp_altivec.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2006 Luca Barbato <lu_zero@gentoo.org> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "util_altivec.h" -#include "float_dsp_altivec.h" - -void ff_vector_fmul_altivec(float *dst, const float *src0, const float *src1, - int len) -{ - int i; - vector float d0, d1, s, zero = (vector float)vec_splat_u32(0); - for (i = 0; i < len - 7; i += 8) { - d0 = vec_ld( 0, src0 + i); - s = vec_ld( 0, src1 + i); - d1 = vec_ld(16, src0 + i); - d0 = vec_madd(d0, s, zero); - d1 = vec_madd(d1, vec_ld(16, src1 + i), zero); - vec_st(d0, 0, dst + i); - vec_st(d1, 16, dst + i); - } -} - -void ff_vector_fmul_window_altivec(float *dst, const float *src0, - const float *src1, const float *win, int len) -{ - vector float zero, t0, t1, s0, s1, wi, wj; - const vector unsigned char reverse = vcprm(3, 2, 1, 0); - int i, j; - - dst += len; - win += len; - src0 += len; - - zero = (vector float)vec_splat_u32(0); - - for (i = -len * 4, j = len * 4 - 16; i < 0; i += 16, j -= 16) { - s0 = vec_ld(i, src0); - s1 = vec_ld(j, src1); - wi = vec_ld(i, win); - wj = vec_ld(j, win); - - s1 = vec_perm(s1, s1, reverse); - wj = vec_perm(wj, wj, reverse); - - t0 = vec_madd(s0, wj, zero); - t0 = vec_nmsub(s1, wi, t0); - t1 = vec_madd(s0, wi, zero); - t1 = vec_madd(s1, wj, t1); - t1 = vec_perm(t1, t1, reverse); - - vec_st(t0, i, dst); - vec_st(t1, j, dst); - } -} - -void ff_vector_fmul_add_altivec(float *dst, const float *src0, - const float *src1, const float *src2, - int len) -{ - int i; - vector float d, s0, s1, s2, t0, t1, edges; - vector unsigned char align = vec_lvsr(0,dst), - mask = vec_lvsl(0, dst); - - for (i = 0; i < len - 3; i += 4) { - t0 = vec_ld(0, dst + i); - t1 = vec_ld(15, dst + i); - s0 = vec_ld(0, src0 + i); - s1 = vec_ld(0, src1 + i); - s2 = vec_ld(0, src2 + i); - edges = vec_perm(t1, t0, mask); - d = vec_madd(s0, s1, s2); - t1 = vec_perm(d, edges, align); - t0 = vec_perm(edges, d, align); - vec_st(t1, 15, dst + i); - vec_st(t0, 0, dst + i); - } -} - -void ff_vector_fmul_reverse_altivec(float *dst, const float *src0, - const float *src1, int len) -{ - int i; - vector float d, s0, s1, h0, l0, - s2, s3, zero = (vector float) vec_splat_u32(0); - - src1 += len-4; - for(i = 0; i < len - 7; i += 8) { - s1 = vec_ld(0, src1 - i); // [a,b,c,d] - s0 = vec_ld(0, src0 + i); - l0 = vec_mergel(s1, s1); // [c,c,d,d] - s3 = vec_ld(-16, src1 - i); - h0 = vec_mergeh(s1, s1); // [a,a,b,b] - s2 = vec_ld(16, src0 + i); - s1 = vec_mergeh(vec_mergel(l0, h0), // [d,b,d,b] - vec_mergeh(l0, h0)); // [c,a,c,a] - // [d,c,b,a] - l0 = vec_mergel(s3, s3); - d = vec_madd(s0, s1, zero); - h0 = vec_mergeh(s3, s3); - vec_st(d, 0, dst + i); - s3 = vec_mergeh(vec_mergel(l0, h0), - vec_mergeh(l0, h0)); - d = vec_madd(s2, s3, zero); - vec_st(d, 16, dst + i); - } -} diff --git a/ffmpeg1/libavutil/ppc/float_dsp_altivec.h b/ffmpeg1/libavutil/ppc/float_dsp_altivec.h deleted file mode 100644 index b262a83..0000000 --- a/ffmpeg1/libavutil/ppc/float_dsp_altivec.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2006 Luca Barbato <lu_zero@gentoo.org> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PPC_FLOAT_DSP_ALTIVEC_H -#define AVUTIL_PPC_FLOAT_DSP_ALTIVEC_H - -extern void ff_vector_fmul_altivec(float *dst, const float *src0, - const float *src1, int len); - -extern void ff_vector_fmul_window_altivec(float *dst, const float *src0, - const float *src1, const float *win, - int len); - -extern void ff_vector_fmul_add_altivec(float *dst, const float *src0, - const float *src1, const float *src2, - int len); - -extern void ff_vector_fmul_reverse_altivec(float *dst, const float *src0, - const float *src1, int len); - -#endif /* AVUTIL_PPC_FLOAT_DSP_ALTIVEC_H */ diff --git a/ffmpeg1/libavutil/ppc/float_dsp_init.c b/ffmpeg1/libavutil/ppc/float_dsp_init.c deleted file mode 100644 index d9ca53e..0000000 --- a/ffmpeg1/libavutil/ppc/float_dsp_init.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2006 Luca Barbato <lu_zero@gentoo.org> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" -#include "libavutil/cpu.h" -#include "libavutil/float_dsp.h" -#include "float_dsp_altivec.h" - -void ff_float_dsp_init_ppc(AVFloatDSPContext *fdsp, int bit_exact) -{ -#if HAVE_ALTIVEC - int mm_flags = av_get_cpu_flags(); - - if (!(mm_flags & AV_CPU_FLAG_ALTIVEC)) - return; - - fdsp->vector_fmul = ff_vector_fmul_altivec; - fdsp->vector_fmul_add = ff_vector_fmul_add_altivec; - fdsp->vector_fmul_reverse = ff_vector_fmul_reverse_altivec; - - if (!bit_exact) { - fdsp->vector_fmul_window = ff_vector_fmul_window_altivec; - } -#endif -} diff --git a/ffmpeg1/libavutil/ppc/intreadwrite.h b/ffmpeg1/libavutil/ppc/intreadwrite.h deleted file mode 100644 index 3667703..0000000 --- a/ffmpeg1/libavutil/ppc/intreadwrite.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2008 Mans Rullgard <mans@mansr.com> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PPC_INTREADWRITE_H -#define AVUTIL_PPC_INTREADWRITE_H - -#include <stdint.h> -#include "config.h" - -#if HAVE_XFORM_ASM - -#define AV_RL16 AV_RL16 -static av_always_inline uint16_t AV_RL16(const void *p) -{ - uint16_t v; - __asm__ ("lhbrx %0, %y1" : "=r"(v) : "Z"(*(const uint16_t*)p)); - return v; -} - -#define AV_WL16 AV_WL16 -static av_always_inline void AV_WL16(void *p, uint16_t v) -{ - __asm__ ("sthbrx %1, %y0" : "=Z"(*(uint16_t*)p) : "r"(v)); -} - -#define AV_RL32 AV_RL32 -static av_always_inline uint32_t AV_RL32(const void *p) -{ - uint32_t v; - __asm__ ("lwbrx %0, %y1" : "=r"(v) : "Z"(*(const uint32_t*)p)); - return v; -} - -#define AV_WL32 AV_WL32 -static av_always_inline void AV_WL32(void *p, uint32_t v) -{ - __asm__ ("stwbrx %1, %y0" : "=Z"(*(uint32_t*)p) : "r"(v)); -} - -#if HAVE_LDBRX - -#define AV_RL64 AV_RL64 -static av_always_inline uint64_t AV_RL64(const void *p) -{ - uint64_t v; - __asm__ ("ldbrx %0, %y1" : "=r"(v) : "Z"(*(const uint64_t*)p)); - return v; -} - -#define AV_WL64 AV_WL64 -static av_always_inline void AV_WL64(void *p, uint64_t v) -{ - __asm__ ("stdbrx %1, %y0" : "=Z"(*(uint64_t*)p) : "r"(v)); -} - -#else - -#define AV_RL64 AV_RL64 -static av_always_inline uint64_t AV_RL64(const void *p) -{ - union { uint64_t v; uint32_t hl[2]; } v; - __asm__ ("lwbrx %0, %y2 \n\t" - "lwbrx %1, %y3 \n\t" - : "=&r"(v.hl[1]), "=r"(v.hl[0]) - : "Z"(*(const uint32_t*)p), "Z"(*((const uint32_t*)p+1))); - return v.v; -} - -#define AV_WL64 AV_WL64 -static av_always_inline void AV_WL64(void *p, uint64_t v) -{ - union { uint64_t v; uint32_t hl[2]; } vv = { v }; - __asm__ ("stwbrx %2, %y0 \n\t" - "stwbrx %3, %y1 \n\t" - : "=Z"(*(uint32_t*)p), "=Z"(*((uint32_t*)p+1)) - : "r"(vv.hl[1]), "r"(vv.hl[0])); -} - -#endif /* HAVE_LDBRX */ - -#endif /* HAVE_XFORM_ASM */ - -/* - * GCC fails miserably on the packed struct version which is used by - * default, so we override it here. - */ - -#define AV_RB64(p) (*(const uint64_t *)(p)) -#define AV_WB64(p, v) (*(uint64_t *)(p) = (v)) - -#endif /* AVUTIL_PPC_INTREADWRITE_H */ diff --git a/ffmpeg1/libavutil/ppc/timer.h b/ffmpeg1/libavutil/ppc/timer.h deleted file mode 100644 index 155fc01..0000000 --- a/ffmpeg1/libavutil/ppc/timer.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2005 Luca Barbato <lu_zero@gentoo.org> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PPC_TIMER_H -#define AVUTIL_PPC_TIMER_H - -#include <stdint.h> - -#define AV_READ_TIME read_time - -static inline uint64_t read_time(void) -{ - uint32_t tbu, tbl, temp; - - /* from section 2.2.1 of the 32-bit PowerPC PEM */ - __asm__ volatile( - "1:\n" - "mftbu %2\n" - "mftb %0\n" - "mftbu %1\n" - "cmpw %2,%1\n" - "bne 1b\n" - : "=r"(tbl), "=r"(tbu), "=r"(temp) - : - : "cc"); - - return (((uint64_t)tbu)<<32) | (uint64_t)tbl; -} - -#endif /* AVUTIL_PPC_TIMER_H */ diff --git a/ffmpeg1/libavutil/ppc/types_altivec.h b/ffmpeg1/libavutil/ppc/types_altivec.h deleted file mode 100644 index 69d8957..0000000 --- a/ffmpeg1/libavutil/ppc/types_altivec.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2006 Guillaume Poirier <gpoirier@mplayerhq.hu> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PPC_TYPES_ALTIVEC_H -#define AVUTIL_PPC_TYPES_ALTIVEC_H - -/*********************************************************************** - * Vector types - **********************************************************************/ -#define vec_u8 vector unsigned char -#define vec_s8 vector signed char -#define vec_u16 vector unsigned short -#define vec_s16 vector signed short -#define vec_u32 vector unsigned int -#define vec_s32 vector signed int -#define vec_f vector float - -/*********************************************************************** - * Null vector - **********************************************************************/ -#define LOAD_ZERO const vec_u8 zerov = vec_splat_u8( 0 ) - -#define zero_u8v (vec_u8) zerov -#define zero_s8v (vec_s8) zerov -#define zero_u16v (vec_u16) zerov -#define zero_s16v (vec_s16) zerov -#define zero_u32v (vec_u32) zerov -#define zero_s32v (vec_s32) zerov - -#endif /* AVUTIL_PPC_TYPES_ALTIVEC_H */ diff --git a/ffmpeg1/libavutil/ppc/util_altivec.h b/ffmpeg1/libavutil/ppc/util_altivec.h deleted file mode 100644 index 7fe3150..0000000 --- a/ffmpeg1/libavutil/ppc/util_altivec.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Contains misc utility macros and inline functions - */ - -#ifndef AVUTIL_PPC_UTIL_ALTIVEC_H -#define AVUTIL_PPC_UTIL_ALTIVEC_H - -#include <stdint.h> - -#include "config.h" - -#if HAVE_ALTIVEC_H -#include <altivec.h> -#endif - -#include "types_altivec.h" - -// used to build registers permutation vectors (vcprm) -// the 's' are for words in the _s_econd vector -#define WORD_0 0x00,0x01,0x02,0x03 -#define WORD_1 0x04,0x05,0x06,0x07 -#define WORD_2 0x08,0x09,0x0a,0x0b -#define WORD_3 0x0c,0x0d,0x0e,0x0f -#define WORD_s0 0x10,0x11,0x12,0x13 -#define WORD_s1 0x14,0x15,0x16,0x17 -#define WORD_s2 0x18,0x19,0x1a,0x1b -#define WORD_s3 0x1c,0x1d,0x1e,0x1f - -#define vcprm(a,b,c,d) (const vector unsigned char){WORD_ ## a, WORD_ ## b, WORD_ ## c, WORD_ ## d} -#define vcii(a,b,c,d) (const vector float){FLOAT_ ## a, FLOAT_ ## b, FLOAT_ ## c, FLOAT_ ## d} - -// vcprmle is used to keep the same index as in the SSE version. -// it's the same as vcprm, with the index inversed -// ('le' is Little Endian) -#define vcprmle(a,b,c,d) vcprm(d,c,b,a) - -// used to build inverse/identity vectors (vcii) -// n is _n_egative, p is _p_ositive -#define FLOAT_n -1. -#define FLOAT_p 1. - - -// Transpose 8x8 matrix of 16-bit elements (in-place) -#define TRANSPOSE8(a,b,c,d,e,f,g,h) \ -do { \ - vector signed short A1, B1, C1, D1, E1, F1, G1, H1; \ - vector signed short A2, B2, C2, D2, E2, F2, G2, H2; \ - \ - A1 = vec_mergeh (a, e); \ - B1 = vec_mergel (a, e); \ - C1 = vec_mergeh (b, f); \ - D1 = vec_mergel (b, f); \ - E1 = vec_mergeh (c, g); \ - F1 = vec_mergel (c, g); \ - G1 = vec_mergeh (d, h); \ - H1 = vec_mergel (d, h); \ - \ - A2 = vec_mergeh (A1, E1); \ - B2 = vec_mergel (A1, E1); \ - C2 = vec_mergeh (B1, F1); \ - D2 = vec_mergel (B1, F1); \ - E2 = vec_mergeh (C1, G1); \ - F2 = vec_mergel (C1, G1); \ - G2 = vec_mergeh (D1, H1); \ - H2 = vec_mergel (D1, H1); \ - \ - a = vec_mergeh (A2, E2); \ - b = vec_mergel (A2, E2); \ - c = vec_mergeh (B2, F2); \ - d = vec_mergel (B2, F2); \ - e = vec_mergeh (C2, G2); \ - f = vec_mergel (C2, G2); \ - g = vec_mergeh (D2, H2); \ - h = vec_mergel (D2, H2); \ -} while (0) - - -/** @brief loads unaligned vector @a *src with offset @a offset - and returns it */ -static inline vector unsigned char unaligned_load(int offset, uint8_t *src) -{ - register vector unsigned char first = vec_ld(offset, src); - register vector unsigned char second = vec_ld(offset+15, src); - register vector unsigned char mask = vec_lvsl(offset, src); - return vec_perm(first, second, mask); -} - -/** - * loads vector known misalignment - * @param perm_vec the align permute vector to combine the two loads from lvsl - */ -static inline vec_u8 load_with_perm_vec(int offset, uint8_t *src, vec_u8 perm_vec) -{ - vec_u8 a = vec_ld(offset, src); - vec_u8 b = vec_ld(offset+15, src); - return vec_perm(a, b, perm_vec); -} - -#endif /* AVUTIL_PPC_UTIL_ALTIVEC_H */ |
