mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 05:46:58 +00:00
Issue #888 - Enable dav1d SIMD on more architectures
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
SOURCES += [
|
||||
'/media/libdav1d/src/src/arm/cpu.c',
|
||||
]
|
||||
|
||||
if CONFIG['CPU_ARCH'] == 'aarch64':
|
||||
SOURCES += [
|
||||
'/media/libdav1d/src/src/arm/64/cdef.S',
|
||||
'/media/libdav1d/src/src/arm/64/cdef16.S',
|
||||
'/media/libdav1d/src/src/arm/64/filmgrain.S',
|
||||
'/media/libdav1d/src/src/arm/64/filmgrain16.S',
|
||||
'/media/libdav1d/src/src/arm/64/ipred.S',
|
||||
'/media/libdav1d/src/src/arm/64/ipred16.S',
|
||||
'/media/libdav1d/src/src/arm/64/itx.S',
|
||||
'/media/libdav1d/src/src/arm/64/itx16.S',
|
||||
'/media/libdav1d/src/src/arm/64/loopfilter.S',
|
||||
'/media/libdav1d/src/src/arm/64/loopfilter16.S',
|
||||
'/media/libdav1d/src/src/arm/64/looprestoration.S',
|
||||
'/media/libdav1d/src/src/arm/64/looprestoration16.S',
|
||||
'/media/libdav1d/src/src/arm/64/looprestoration_common.S',
|
||||
'/media/libdav1d/src/src/arm/64/mc.S',
|
||||
'/media/libdav1d/src/src/arm/64/mc16.S',
|
||||
'/media/libdav1d/src/src/arm/64/mc16_sve.S',
|
||||
'/media/libdav1d/src/src/arm/64/mc_dotprod.S',
|
||||
'/media/libdav1d/src/src/arm/64/msac.S',
|
||||
'/media/libdav1d/src/src/arm/64/refmvs.S',
|
||||
]
|
||||
else:
|
||||
SOURCES += [
|
||||
'/media/libdav1d/src/src/arm/32/cdef.S',
|
||||
'/media/libdav1d/src/src/arm/32/cdef16.S',
|
||||
'/media/libdav1d/src/src/arm/32/filmgrain.S',
|
||||
'/media/libdav1d/src/src/arm/32/filmgrain16.S',
|
||||
'/media/libdav1d/src/src/arm/32/ipred.S',
|
||||
'/media/libdav1d/src/src/arm/32/ipred16.S',
|
||||
'/media/libdav1d/src/src/arm/32/itx.S',
|
||||
'/media/libdav1d/src/src/arm/32/itx16.S',
|
||||
'/media/libdav1d/src/src/arm/32/loopfilter.S',
|
||||
'/media/libdav1d/src/src/arm/32/loopfilter16.S',
|
||||
'/media/libdav1d/src/src/arm/32/looprestoration.S',
|
||||
'/media/libdav1d/src/src/arm/32/looprestoration16.S',
|
||||
'/media/libdav1d/src/src/arm/32/looprestoration_common.S',
|
||||
'/media/libdav1d/src/src/arm/32/mc.S',
|
||||
'/media/libdav1d/src/src/arm/32/mc16.S',
|
||||
'/media/libdav1d/src/src/arm/32/msac.S',
|
||||
'/media/libdav1d/src/src/arm/32/refmvs.S',
|
||||
]
|
||||
|
||||
ASFLAGS += [
|
||||
'-I%s/media/libdav1d/config' % TOPSRCDIR,
|
||||
'-I%s/media/libdav1d/src' % TOPSRCDIR,
|
||||
]
|
||||
|
||||
if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['CLANG_CXX']:
|
||||
ASFLAGS += [
|
||||
'-no-integrated-as',
|
||||
]
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
'/media/libdav1d/config',
|
||||
'/media/libdav1d/src',
|
||||
'/media/libdav1d/src/include',
|
||||
'/media/libdav1d/src/include/dav1d',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'gkmedias'
|
||||
|
||||
ALLOW_COMPILER_WARNINGS = True
|
||||
|
||||
if CONFIG['GNU_CC'] or CONFIG['CLANG_CL']:
|
||||
CFLAGS += [
|
||||
'-Wno-sign-compare',
|
||||
'-Wno-unused-function',
|
||||
'-Wno-unused-parameter',
|
||||
]
|
||||
@@ -0,0 +1,65 @@
|
||||
; Mozilla build configuration for bundled dav1d x86 assembly.
|
||||
|
||||
%define private_prefix dav1d
|
||||
|
||||
%ifndef ARCH_X86_64
|
||||
%ifidn __OUTPUT_FORMAT__,elf64
|
||||
%define ARCH_X86_64 1
|
||||
%elifidn __OUTPUT_FORMAT__,macho64
|
||||
%define ARCH_X86_64 1
|
||||
%elifidn __OUTPUT_FORMAT__,win64
|
||||
%define ARCH_X86_64 1
|
||||
%elifidn __OUTPUT_FORMAT__,x64
|
||||
%define ARCH_X86_64 1
|
||||
%else
|
||||
%define ARCH_X86_64 0
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%ifndef ARCH_X86_32
|
||||
%if ARCH_X86_64
|
||||
%define ARCH_X86_32 0
|
||||
%else
|
||||
%define ARCH_X86_32 1
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%ifndef STACK_ALIGNMENT
|
||||
%if ARCH_X86_64
|
||||
%define STACK_ALIGNMENT 16
|
||||
%elifidn __OUTPUT_FORMAT__,elf
|
||||
%define STACK_ALIGNMENT 16
|
||||
%elifidn __OUTPUT_FORMAT__,elf32
|
||||
%define STACK_ALIGNMENT 16
|
||||
%elifidn __OUTPUT_FORMAT__,macho
|
||||
%define STACK_ALIGNMENT 16
|
||||
%elifidn __OUTPUT_FORMAT__,macho32
|
||||
%define STACK_ALIGNMENT 16
|
||||
%else
|
||||
%define STACK_ALIGNMENT 4
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%ifndef PIC
|
||||
%ifidn __OUTPUT_FORMAT__,win32
|
||||
%define PIC 0
|
||||
%else
|
||||
%define PIC 1
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%ifndef FORCE_VEX_ENCODING
|
||||
%define FORCE_VEX_ENCODING 0
|
||||
%endif
|
||||
|
||||
%ifidn __OUTPUT_FORMAT__,win32
|
||||
%if ARCH_X86_32
|
||||
%define PREFIX 1
|
||||
%endif
|
||||
%elifidn __OUTPUT_FORMAT__,macho
|
||||
%define PREFIX 1
|
||||
%elifidn __OUTPUT_FORMAT__,macho32
|
||||
%define PREFIX 1
|
||||
%elifidn __OUTPUT_FORMAT__,macho64
|
||||
%define PREFIX 1
|
||||
%endif
|
||||
@@ -36,7 +36,10 @@
|
||||
# define ARCH_LOONGARCH64 0
|
||||
#endif
|
||||
|
||||
#if defined(__powerpc64__) && defined(_LITTLE_ENDIAN)
|
||||
#if defined(__powerpc64__) && \
|
||||
(defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) || \
|
||||
(defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
|
||||
__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
|
||||
# define ARCH_PPC64LE 1
|
||||
#else
|
||||
# define ARCH_PPC64LE 0
|
||||
@@ -58,13 +61,37 @@
|
||||
#define CONFIG_16BPC 1
|
||||
#define CONFIG_LOG 0
|
||||
#define CONFIG_MACOS_KPERF 0
|
||||
#if ARCH_LOONGARCH64
|
||||
#if ARCH_AARCH64 || ARCH_ARM || ARCH_LOONGARCH64 || ARCH_PPC64LE || ARCH_X86
|
||||
# define HAVE_ASM 1
|
||||
#else
|
||||
# define HAVE_ASM 0
|
||||
#endif
|
||||
#define TRIM_DSP_FUNCTIONS 0
|
||||
|
||||
#define HAVE_AS_FUNC 0
|
||||
#if ARCH_AARCH64
|
||||
# define HAVE_AS_ARCH_DIRECTIVE 1
|
||||
# define AS_ARCH_LEVEL armv8-a
|
||||
# define HAVE_AS_ARCHEXT_DOTPROD_DIRECTIVE 1
|
||||
# define HAVE_AS_ARCHEXT_I8MM_DIRECTIVE 1
|
||||
# define HAVE_AS_ARCHEXT_SVE_DIRECTIVE 1
|
||||
# define HAVE_AS_ARCHEXT_SVE2_DIRECTIVE 1
|
||||
# define HAVE_DOTPROD 1
|
||||
# define HAVE_I8MM 1
|
||||
# define HAVE_SVE 1
|
||||
# define HAVE_SVE2 1
|
||||
#else
|
||||
# define HAVE_AS_ARCH_DIRECTIVE 0
|
||||
# define HAVE_AS_ARCHEXT_DOTPROD_DIRECTIVE 0
|
||||
# define HAVE_AS_ARCHEXT_I8MM_DIRECTIVE 0
|
||||
# define HAVE_AS_ARCHEXT_SVE_DIRECTIVE 0
|
||||
# define HAVE_AS_ARCHEXT_SVE2_DIRECTIVE 0
|
||||
# define HAVE_DOTPROD 0
|
||||
# define HAVE_I8MM 0
|
||||
# define HAVE_SVE 0
|
||||
# define HAVE_SVE2 0
|
||||
#endif
|
||||
|
||||
#define HAVE_ALIGNED_ALLOC 0
|
||||
#define HAVE_DLSYM 0
|
||||
#define HAVE_ELF_AUX_INFO 0
|
||||
|
||||
@@ -66,6 +66,13 @@ bitdepth_sources = [
|
||||
SOURCES += common_sources
|
||||
SOURCES += bitdepth_sources
|
||||
|
||||
if CONFIG['CPU_ARCH'].startswith('x86'):
|
||||
DIRS += ['x86']
|
||||
elif CONFIG['CPU_ARCH'] in ('arm', 'aarch64'):
|
||||
DIRS += ['arm']
|
||||
elif CONFIG['CPU_ARCH'] == 'ppc64' and CONFIG['TARGET_ENDIANNESS'] == 'little':
|
||||
DIRS += ['ppc']
|
||||
|
||||
if CONFIG['OS_TARGET'] == 'WINNT':
|
||||
SOURCES += [
|
||||
'/media/libdav1d/src/src/win32/thread.c',
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
vsx_sources = [
|
||||
'ppc_cdef_vsx_16bpc.c',
|
||||
'ppc_cdef_vsx_8bpc.c',
|
||||
'ppc_looprestoration_vsx_16bpc.c',
|
||||
'ppc_looprestoration_vsx_8bpc.c',
|
||||
]
|
||||
|
||||
pwr9_sources = [
|
||||
'ppc_itx_pwr9_16bpc.c',
|
||||
'ppc_itx_pwr9_8bpc.c',
|
||||
'ppc_loopfilter_pwr9_16bpc.c',
|
||||
'ppc_loopfilter_pwr9_8bpc.c',
|
||||
'ppc_mc_pwr9_16bpc.c',
|
||||
'ppc_mc_pwr9_8bpc.c',
|
||||
]
|
||||
|
||||
SOURCES += [
|
||||
'/media/libdav1d/src/src/ppc/cpu.c',
|
||||
]
|
||||
SOURCES += pwr9_sources
|
||||
SOURCES += vsx_sources
|
||||
|
||||
for f in pwr9_sources:
|
||||
SOURCES[f].flags += [
|
||||
'-mcpu=power9',
|
||||
]
|
||||
|
||||
for f in vsx_sources:
|
||||
SOURCES[f].flags += [
|
||||
'-maltivec',
|
||||
'-mvsx',
|
||||
]
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
'/media/libdav1d/config',
|
||||
'/media/libdav1d/src',
|
||||
'/media/libdav1d/src/include',
|
||||
'/media/libdav1d/src/include/dav1d',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'gkmedias'
|
||||
|
||||
ALLOW_COMPILER_WARNINGS = True
|
||||
|
||||
if CONFIG['GNU_CC'] or CONFIG['CLANG_CL']:
|
||||
CFLAGS += [
|
||||
'-Wno-sign-compare',
|
||||
'-Wno-unused-function',
|
||||
'-Wno-unused-parameter',
|
||||
]
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 16
|
||||
#define DAV1D_VSX 1
|
||||
#include "../src/src/ppc/cdef_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 8
|
||||
#define DAV1D_VSX 1
|
||||
#include "../src/src/ppc/cdef_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 16
|
||||
#define DAV1D_PWR9 1
|
||||
#include "../src/src/ppc/itx_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 8
|
||||
#define DAV1D_PWR9 1
|
||||
#include "../src/src/ppc/itx_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 16
|
||||
#define DAV1D_PWR9 1
|
||||
#include "../src/src/ppc/loopfilter_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 8
|
||||
#define DAV1D_PWR9 1
|
||||
#include "../src/src/ppc/loopfilter_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 16
|
||||
#define DAV1D_VSX 1
|
||||
#include "../src/src/ppc/looprestoration_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 8
|
||||
#define DAV1D_VSX 1
|
||||
#include "../src/src/ppc/looprestoration_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 16
|
||||
#define DAV1D_PWR9 1
|
||||
#include "../src/src/ppc/mc_tmpl.c"
|
||||
@@ -0,0 +1,3 @@
|
||||
#define BITDEPTH 8
|
||||
#define DAV1D_PWR9 1
|
||||
#include "../src/src/ppc/mc_tmpl.c"
|
||||
@@ -0,0 +1,79 @@
|
||||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
SOURCES += [
|
||||
'/media/libdav1d/src/src/x86/cdef16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/cdef16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/cdef16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/cdef_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/cdef_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/cdef_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/cpuid.asm',
|
||||
'/media/libdav1d/src/src/x86/cpu.c',
|
||||
'/media/libdav1d/src/src/x86/filmgrain16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/filmgrain16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/filmgrain16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/filmgrain_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/filmgrain_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/filmgrain_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/ipred16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/ipred16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/ipred16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/ipred_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/ipred_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/ipred_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/itx16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/itx16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/itx16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/itx_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/itx_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/itx_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/loopfilter16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/loopfilter16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/loopfilter16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/loopfilter_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/loopfilter_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/loopfilter_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/looprestoration16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/looprestoration16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/looprestoration16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/looprestoration_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/looprestoration_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/looprestoration_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/mc16_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/mc16_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/mc16_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/mc_avx2.asm',
|
||||
'/media/libdav1d/src/src/x86/mc_avx512.asm',
|
||||
'/media/libdav1d/src/src/x86/mc_sse.asm',
|
||||
'/media/libdav1d/src/src/x86/msac.asm',
|
||||
'/media/libdav1d/src/src/x86/pal.asm',
|
||||
'/media/libdav1d/src/src/x86/refmvs.asm',
|
||||
]
|
||||
|
||||
USE_NASM = True
|
||||
|
||||
ASFLAGS += [
|
||||
'-I%s/media/libdav1d/config/' % TOPSRCDIR,
|
||||
'-I%s/media/libdav1d/src/src/' % TOPSRCDIR,
|
||||
]
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
'/media/libdav1d/config',
|
||||
'/media/libdav1d/src',
|
||||
'/media/libdav1d/src/include',
|
||||
'/media/libdav1d/src/include/dav1d',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'gkmedias'
|
||||
|
||||
ALLOW_COMPILER_WARNINGS = True
|
||||
|
||||
if CONFIG['GNU_CC'] or CONFIG['CLANG_CL']:
|
||||
CFLAGS += [
|
||||
'-Wno-sign-compare',
|
||||
'-Wno-unused-function',
|
||||
'-Wno-unused-parameter',
|
||||
]
|
||||
@@ -1803,6 +1803,17 @@ VARIABLES = {
|
||||
If yasm is not available on this system, or does not support the
|
||||
current target architecture, an error will be raised.
|
||||
"""),
|
||||
|
||||
'USE_NASM': (bool, bool,
|
||||
"""Use the nasm assembler to assemble assembly files from SOURCES.
|
||||
|
||||
By default, the build will use the toolchain assembler, $(AS), to
|
||||
assemble source files in assembly language (.s or .asm files). Setting
|
||||
this value to ``True`` will cause it to use nasm instead.
|
||||
|
||||
If nasm is not available on this system, or does not support the
|
||||
current target architecture, an error will be raised.
|
||||
"""),
|
||||
}
|
||||
|
||||
# Sanity check: we don't want any variable above to have a list as storage type.
|
||||
|
||||
@@ -1006,6 +1006,14 @@ class TreeMetadataEmitter(LoggingMixin):
|
||||
passthru.variables['ASFLAGS'] = context.config.substs.get('YASM_ASFLAGS')
|
||||
passthru.variables['AS_DASH_C_FLAG'] = ''
|
||||
|
||||
if context.get('USE_NASM') is True:
|
||||
nasm = context.config.substs.get('NASM')
|
||||
if not nasm or not context.config.substs.get('HAVE_NASM'):
|
||||
raise SandboxValidationError('nasm 2.14 or later is not available', context)
|
||||
passthru.variables['AS'] = nasm
|
||||
passthru.variables['ASFLAGS'] = context.config.substs.get('NASM_ASFLAGS')
|
||||
passthru.variables['AS_DASH_C_FLAG'] = ''
|
||||
|
||||
for (symbol, cls) in [
|
||||
('ANDROID_RES_DIRS', AndroidResDirs),
|
||||
('ANDROID_EXTRA_RES_DIRS', AndroidExtraResDirs),
|
||||
|
||||
Reference in New Issue
Block a user