Restore emms usage on x86_64 after 726b021a12
Even on x86_64, emms has to be called if the x87 state has been clobbered - the calling code (either within libvpx or in a caller outside of libvpx) may be using the x87 instructions, even though use of them isn't all that common on x86_64. This fixes builds with clang for mingw/x86_64. Change-Id: I1f6072835590b862bad156f17331ba65c813ddd9
This commit is contained in:
parent
99e1784525
commit
a6fdfda44c
@ -140,7 +140,7 @@ class RegisterStateCheck {};
|
|||||||
|
|
||||||
#endif // _WIN64
|
#endif // _WIN64
|
||||||
|
|
||||||
#if ARCH_X86
|
#if ARCH_X86 || ARCH_X86_64
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
|
||||||
namespace libvpx_test {
|
namespace libvpx_test {
|
||||||
@ -178,7 +178,7 @@ class RegisterStateCheckMMX {
|
|||||||
} // namespace libvpx_test
|
} // namespace libvpx_test
|
||||||
|
|
||||||
#endif // __GNUC__
|
#endif // __GNUC__
|
||||||
#endif // ARCH_X86
|
#endif // ARCH_X86 || ARCH_X86_64
|
||||||
|
|
||||||
#ifndef API_REGISTER_STATE_CHECK
|
#ifndef API_REGISTER_STATE_CHECK
|
||||||
#define API_REGISTER_STATE_CHECK ASM_REGISTER_STATE_CHECK
|
#define API_REGISTER_STATE_CHECK ASM_REGISTER_STATE_CHECK
|
||||||
|
18
vpx_ports/emms_mmx.asm
Normal file
18
vpx_ports/emms_mmx.asm
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
;
|
||||||
|
; Copyright (c) 2010 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 "vpx_ports/x86_abi_support.asm"
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global sym(vpx_clear_system_state) PRIVATE
|
||||||
|
sym(vpx_clear_system_state):
|
||||||
|
emms
|
||||||
|
ret
|
@ -17,11 +17,11 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ARCH_X86 && HAVE_MMX
|
#if (ARCH_X86 || ARCH_X86_64) && HAVE_MMX
|
||||||
extern void vpx_clear_system_state();
|
extern void vpx_clear_system_state();
|
||||||
#else
|
#else
|
||||||
#define vpx_clear_system_state()
|
#define vpx_clear_system_state()
|
||||||
#endif // ARCH_X86 && HAVE_MMX
|
#endif // (ARCH_X86 || ARCH_X86_64) && HAVE_MMX
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
@ -20,6 +20,10 @@ PORTS_SRCS-yes += vpx_timer.h
|
|||||||
ifeq ($(ARCH_X86),yes)
|
ifeq ($(ARCH_X86),yes)
|
||||||
PORTS_SRCS-$(HAVE_MMX) += emms_mmx.c
|
PORTS_SRCS-$(HAVE_MMX) += emms_mmx.c
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(ARCH_X86_64),yes)
|
||||||
|
# Visual Studio x64 does not support the _mm_empty() intrinsic.
|
||||||
|
PORTS_SRCS-$(HAVE_MMX) += emms_mmx.asm
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(ARCH_X86_64),yes)
|
ifeq ($(ARCH_X86_64),yes)
|
||||||
PORTS_SRCS-$(CONFIG_MSVS) += float_control_word.asm
|
PORTS_SRCS-$(CONFIG_MSVS) += float_control_word.asm
|
||||||
|
Loading…
Reference in New Issue
Block a user