libobs: Build SIMDE on platforms without SSE2

SIMDE was introduced for aarch64 support, however, the library itself
supports non-SIMD fallback, which allows us provide support to other
platforms without code changes.

There is another world beyond x86. So we can simply enable SIMDE for
processors without SSE2 support.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
master
Jiaxun Yang 2020-01-22 13:56:34 +08:00
parent 345e933d9f
commit 6366f6ab59
12 changed files with 38 additions and 42 deletions

View File

@ -78,8 +78,26 @@ if(${CMAKE_C_COMPILER_ID} MATCHES "Clang" OR ${CMAKE_CXX_COMPILER_ID} MATCHES "C
set(CMAKE_COMPILER_IS_CLANG TRUE)
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64(le)?")
if (MSVC_CXX_ARCHITECTURE_ID)
string(TOLOWER ${MSVC_CXX_ARCHITECTURE_ID} LOWERCASE_CMAKE_SYSTEM_PROCESSOR)
else ()
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_SYSTEM_PROCESSOR)
endif ()
if(LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86|x64|x86_64|amd64)")
set(NEEDS_SIMDE "0")
if(NOT MSVC)
set(ARCH_SIMD_FLAGS "-mmmx" "-msse" "-msse2")
endif()
elseif(LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64(le)?")
set(NEEDS_SIMDE "0")
set(ARCH_SIMD_FLAGS "-mvsx")
add_compile_definitions(NO_WARN_X86_INTRINSICS)
else()
set(NEEDS_SIMDE "1")
add_definitions(-DNEEDS_SIMDE=1)
set(ARCH_SIMD_FLAGS "")
message(STATUS "No Native SSE2 SIMD Support - Using SIMDE")
endif()
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)

View File

@ -23,26 +23,15 @@ add_library(media-playback STATIC
${media-playback_SOURCES}
)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64(le)?")
target_compile_options(media-playback
PUBLIC
-mvsx)
add_compile_definitions(NO_WARN_X86_INTRINSICS)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
target_compile_options(media-playback
PUBLIC)
elseif(NOT MSVC)
target_compile_options(media-playback
PUBLIC
-mmmx
-msse
-msse2)
endif()
target_compile_options(media-playback
PUBLIC
${ARCH_SIMD_FLAGS})
target_include_directories(media-playback
PUBLIC .
)
if(NOT MSVC)
if(NOT MINGW)
target_compile_options(media-playback PRIVATE -fPIC)

View File

@ -174,20 +174,21 @@ elseif(UNIX)
util/pipe-posix.c
util/platform-nix.c)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
if(NEEDS_SIMDE)
set(libobs_PLATFORM_HEADERS
util/aarch/check.h
util/aarch/hedley.h
util/aarch/mmx.h
util/aarch/simde-arch.h
util/aarch/simde-common.h
util/aarch/sse.h
util/aarch/sse2.h
util/simde/check.h
util/simde/hedley.h
util/simde/mmx.h
util/simde/simde-arch.h
util/simde/simde-common.h
util/simde/sse.h
util/simde/sse2.h
util/threading-posix.h)
else()
set(libobs_PLATFORM_HEADERS
util/threading-posix.h)
endif()
if(HAVE_PULSEAUDIO)
set(libobs_audio_monitoring_HEADERS
audio-monitoring/pulse/pulseaudio-wrapper.h)
@ -475,22 +476,9 @@ target_compile_definitions(libobs
PUBLIC
HAVE_OBSCONFIG_H)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64(le)?")
target_compile_options(libobs
PUBLIC
-mvsx)
add_compile_definitions(NO_WARN_X86_INTRINSICS)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
target_compile_options(libobs
PUBLIC)
elseif(NOT MSVC)
target_compile_options(libobs
PUBLIC
-mmmx
-msse
-msse2)
endif()
target_compile_options(libobs
PUBLIC
${ARCH_SIMD_FLAGS})
target_compile_options(libobs
PUBLIC

View File

@ -19,6 +19,7 @@
#define HAVE_DBUS @HAVE_DBUS@
#define HAVE_PULSEAUDIO @HAVE_PULSEAUDIO@
#define USE_XINPUT @USE_XINPUT@
#define NEEDS_SIMDE @NEEDS_SIMDE@
#define LIBOBS_IMAGEMAGICK_DIR_STYLE_6L 6
#define LIBOBS_IMAGEMAGICK_DIR_STYLE_7GE 7
#define LIBOBS_IMAGEMAGICK_DIR_STYLE @LIBOBS_IMAGEMAGICK_DIR_STYLE@

View File

@ -17,9 +17,9 @@
#pragma once
#ifdef __aarch64__
#if NEEDS_SIMDE
#include "aarch/sse2.h"
#include "simde/sse2.h"
#define __m128 simde__m128
#define _mm_setzero_ps simde_mm_setzero_ps