1
0
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:
Basilisk-Dev
2026-05-11 10:16:34 -04:00
committed by roytam1
parent 2d83afa321
commit d328cef713
18 changed files with 363 additions and 2 deletions
+79
View File
@@ -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',
]
+65
View File
@@ -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
+29 -2
View File
@@ -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
+7
View File
@@ -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',
+55
View File
@@ -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',
]
+3
View File
@@ -0,0 +1,3 @@
#define BITDEPTH 16
#define DAV1D_VSX 1
#include "../src/src/ppc/cdef_tmpl.c"
+3
View File
@@ -0,0 +1,3 @@
#define BITDEPTH 8
#define DAV1D_VSX 1
#include "../src/src/ppc/cdef_tmpl.c"
+3
View File
@@ -0,0 +1,3 @@
#define BITDEPTH 16
#define DAV1D_PWR9 1
#include "../src/src/ppc/itx_tmpl.c"
+3
View File
@@ -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"
+3
View File
@@ -0,0 +1,3 @@
#define BITDEPTH 16
#define DAV1D_PWR9 1
#include "../src/src/ppc/mc_tmpl.c"
+3
View File
@@ -0,0 +1,3 @@
#define BITDEPTH 8
#define DAV1D_PWR9 1
#include "../src/src/ppc/mc_tmpl.c"
+79
View File
@@ -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),