diff --git a/test/clear_system_state.h b/test/clear_system_state.h index 044a5c758..609a8b050 100644 --- a/test/clear_system_state.h +++ b/test/clear_system_state.h @@ -11,19 +11,13 @@ #define TEST_CLEAR_SYSTEM_STATE_H_ #include "./vpx_config.h" -#if ARCH_X86 || ARCH_X86_64 -#include "vpx_ports/x86.h" -#endif +#include "vpx_ports/system_state.h" namespace libvpx_test { // Reset system to a known state. This function should be used for all non-API // test cases. -inline void ClearSystemState() { -#if ARCH_X86 || ARCH_X86_64 - vpx_reset_mmx_state(); -#endif -} +inline void ClearSystemState() { vpx_clear_system_state(); } } // namespace libvpx_test #endif // TEST_CLEAR_SYSTEM_STATE_H_ diff --git a/test/register_state_check.h b/test/register_state_check.h index a779e5c06..b1cb98335 100644 --- a/test/register_state_check.h +++ b/test/register_state_check.h @@ -140,7 +140,7 @@ class RegisterStateCheck {}; #endif // _WIN64 -#if ARCH_X86 || ARCH_X86_64 +#if ARCH_X86 #if defined(__GNUC__) namespace libvpx_test { @@ -178,7 +178,7 @@ class RegisterStateCheckMMX { } // namespace libvpx_test #endif // __GNUC__ -#endif // ARCH_X86 || ARCH_X86_64 +#endif // ARCH_X86 #ifndef API_REGISTER_STATE_CHECK #define API_REGISTER_STATE_CHECK ASM_REGISTER_STATE_CHECK diff --git a/vpx_ports/emms_mmx.c b/vpx_ports/emms_mmx.c new file mode 100644 index 000000000..1b28809a3 --- /dev/null +++ b/vpx_ports/emms_mmx.c @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2018 The WebM project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include + +void vpx_clear_system_state() { _mm_empty(); } diff --git a/vpx_ports/emms.asm b/vpx_ports/float_control_word.asm similarity index 90% rename from vpx_ports/emms.asm rename to vpx_ports/float_control_word.asm index db8da2873..256dae084 100644 --- a/vpx_ports/emms.asm +++ b/vpx_ports/float_control_word.asm @@ -12,11 +12,6 @@ %include "vpx_ports/x86_abi_support.asm" section .text -global sym(vpx_reset_mmx_state) PRIVATE -sym(vpx_reset_mmx_state): - emms - ret - %if LIBVPX_YASM_WIN64 global sym(vpx_winx64_fldcw) PRIVATE diff --git a/vpx_ports/system_state.h b/vpx_ports/system_state.h index 086c64681..0a19c3cfc 100644 --- a/vpx_ports/system_state.h +++ b/vpx_ports/system_state.h @@ -13,10 +13,18 @@ #include "./vpx_config.h" -#if ARCH_X86 || ARCH_X86_64 -void vpx_reset_mmx_state(void); -#define vpx_clear_system_state() vpx_reset_mmx_state() +#ifdef __cplusplus +extern "C" { +#endif + +#if ARCH_X86 && HAVE_MMX +extern void vpx_clear_system_state(); #else #define vpx_clear_system_state() -#endif // ARCH_X86 || ARCH_X86_64 +#endif // ARCH_X86 && HAVE_MMX + +#ifdef __cplusplus +} // extern "C" +#endif + #endif // VPX_PORTS_SYSTEM_STATE_H_ diff --git a/vpx_ports/vpx_ports.mk b/vpx_ports/vpx_ports.mk index e17145e6c..9299fa0ca 100644 --- a/vpx_ports/vpx_ports.mk +++ b/vpx_ports/vpx_ports.mk @@ -17,8 +17,15 @@ PORTS_SRCS-yes += msvc.h PORTS_SRCS-yes += system_state.h PORTS_SRCS-yes += vpx_timer.h +ifeq ($(ARCH_X86),yes) +PORTS_SRCS-$(HAVE_MMX) += emms_mmx.c +endif + +ifeq ($(ARCH_X86_64),yes) +PORTS_SRCS-$(CONFIG_MSVS) += float_control_word.asm +endif + ifeq ($(ARCH_X86)$(ARCH_X86_64),yes) -PORTS_SRCS-yes += emms.asm PORTS_SRCS-yes += x86.h PORTS_SRCS-yes += x86_abi_support.asm endif diff --git a/vpx_ports/x86.h b/vpx_ports/x86.h index ced65ac05..60c625778 100644 --- a/vpx_ports/x86.h +++ b/vpx_ports/x86.h @@ -317,8 +317,6 @@ static INLINE unsigned int x87_set_double_precision(void) { return mode; } -extern void vpx_reset_mmx_state(void); - #ifdef __cplusplus } // extern "C" #endif