mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-27 19:24:06 +00:00
Fix intrinsics that may be missing on some systems
Create a header to collect all the workarounds for missing intrinsics in one place
This commit is contained in:
parent
87a9208db8
commit
081d16fc33
|
@ -26,18 +26,9 @@
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "encode_coding_tree-avx2.h"
|
#include "encode_coding_tree-avx2.h"
|
||||||
#include "encode_coding_tree.h"
|
#include "encode_coding_tree.h"
|
||||||
|
#include "strategies/missing-intel-intrinsics.h"
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
|
|
||||||
// GCC headers apparently won't have this at all.. sigh
|
|
||||||
#ifndef _andn_u32
|
|
||||||
// VS2015 headers apparently won't have this at all.. sigh
|
|
||||||
#ifdef __andn_u32
|
|
||||||
#define _andn_u32(x, y) (__andn_u32((x), (y)))
|
|
||||||
#else
|
|
||||||
#define _andn_u32(x, y) ((~(x)) & (y))
|
|
||||||
#endif // __andn_u32
|
|
||||||
#endif // _andn_u32
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE: Unlike SSE/AVX comparisons that would return 11 or 00 for gt/lte,
|
* NOTE: Unlike SSE/AVX comparisons that would return 11 or 00 for gt/lte,
|
||||||
* this'll use 1x and 0x as bit patterns (x: garbage). A couple extra
|
* this'll use 1x and 0x as bit patterns (x: garbage). A couple extra
|
||||||
|
|
21
src/strategies/missing-intel-intrinsics.h
Normal file
21
src/strategies/missing-intel-intrinsics.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef MISSING_INTEL_INTRINSICS_H_
|
||||||
|
#define MISSING_INTEL_INTRINSICS_H_
|
||||||
|
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
// Old Visual Studio headers lack the bsrli variant
|
||||||
|
#ifndef _mm_bsrli_si128
|
||||||
|
#define _mm_bsrli_si128(a, imm8) _mm_srli_si128((a), (imm8))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// GCC headers apparently won't have this at all.. sigh
|
||||||
|
#ifndef _andn_u32
|
||||||
|
// VS2015 headers apparently won't have this at all.. sigh
|
||||||
|
#ifdef __andn_u32
|
||||||
|
#define _andn_u32(x, y) (__andn_u32((x), (y)))
|
||||||
|
#else
|
||||||
|
#define _andn_u32(x, y) ((~(x)) & (y))
|
||||||
|
#endif // __andn_u32
|
||||||
|
#endif // _andn_u32
|
||||||
|
|
||||||
|
#endif
|
|
@ -21,8 +21,9 @@
|
||||||
#ifndef REG_SAD_POW2_WIDTHS_SSE41_H_
|
#ifndef REG_SAD_POW2_WIDTHS_SSE41_H_
|
||||||
#define REG_SAD_POW2_WIDTHS_SSE41_H_
|
#define REG_SAD_POW2_WIDTHS_SSE41_H_
|
||||||
|
|
||||||
#include <immintrin.h>
|
|
||||||
#include "kvazaar.h"
|
#include "kvazaar.h"
|
||||||
|
#include "strategies/missing-intel-intrinsics.h"
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
static INLINE uint32_t reg_sad_w0(const kvz_pixel * const data1, const kvz_pixel * const data2,
|
static INLINE uint32_t reg_sad_w0(const kvz_pixel * const data1, const kvz_pixel * const data2,
|
||||||
const int32_t height, const uint32_t stride1,
|
const int32_t height, const uint32_t stride1,
|
||||||
|
|
Loading…
Reference in a new issue