From b2738fdd5be62a515259fe36c11ba9be953bc487 Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 22 Aug 2014 04:49:39 +1000 Subject: [PATCH] Remove 3dnow (unused, obsolete). Greg: merge the removal of EMMS stuff --- common/build/x86emitter/x86emitter.vcxproj | 1 - .../x86emitter/x86emitter.vcxproj.filters | 3 - .../x86emitter/x86emitter_vs2012.vcxproj | 1 - .../x86emitter_vs2012.vcxproj.filters | 3 - .../x86emitter/x86emitter_vs2013.vcxproj | 1 - .../x86emitter_vs2013.vcxproj.filters | 3 - .../include/x86emitter/legacy_instructions.h | 28 --- common/src/x86emitter/3dnow.cpp | 199 ------------------ common/src/x86emitter/CMakeLists.txt | 1 - common/src/x86emitter/simd.cpp | 7 - pcsx2/x86/ix86-32/iCore-32.cpp | 6 +- pcsx2/x86/ix86-32/iR5900-32.cpp | 3 +- 12 files changed, 2 insertions(+), 254 deletions(-) delete mode 100644 common/src/x86emitter/3dnow.cpp diff --git a/common/build/x86emitter/x86emitter.vcxproj b/common/build/x86emitter/x86emitter.vcxproj index 2d6465ca8a..d4c805822e 100644 --- a/common/build/x86emitter/x86emitter.vcxproj +++ b/common/build/x86emitter/x86emitter.vcxproj @@ -97,7 +97,6 @@ - diff --git a/common/build/x86emitter/x86emitter.vcxproj.filters b/common/build/x86emitter/x86emitter.vcxproj.filters index b5e08ad87f..9c156c3005 100644 --- a/common/build/x86emitter/x86emitter.vcxproj.filters +++ b/common/build/x86emitter/x86emitter.vcxproj.filters @@ -27,9 +27,6 @@ - - Source Files - Source Files diff --git a/common/build/x86emitter/x86emitter_vs2012.vcxproj b/common/build/x86emitter/x86emitter_vs2012.vcxproj index 68abde406f..06ed2f64e5 100644 --- a/common/build/x86emitter/x86emitter_vs2012.vcxproj +++ b/common/build/x86emitter/x86emitter_vs2012.vcxproj @@ -101,7 +101,6 @@ - diff --git a/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters b/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters index b5e08ad87f..9c156c3005 100644 --- a/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters +++ b/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters @@ -27,9 +27,6 @@ - - Source Files - Source Files diff --git a/common/build/x86emitter/x86emitter_vs2013.vcxproj b/common/build/x86emitter/x86emitter_vs2013.vcxproj index feea74e82e..b32f5336ce 100644 --- a/common/build/x86emitter/x86emitter_vs2013.vcxproj +++ b/common/build/x86emitter/x86emitter_vs2013.vcxproj @@ -101,7 +101,6 @@ - diff --git a/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters b/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters index c98a8ca8f7..cebe36529e 100644 --- a/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters +++ b/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters @@ -27,9 +27,6 @@ - - Source Files - Source Files diff --git a/common/include/x86emitter/legacy_instructions.h b/common/include/x86emitter/legacy_instructions.h index 8fd2690fe7..217b3808f7 100644 --- a/common/include/x86emitter/legacy_instructions.h +++ b/common/include/x86emitter/legacy_instructions.h @@ -1361,31 +1361,3 @@ extern void SSE4_PMAXUD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMINUD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMULDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PTEST_XMM_to_XMM(x86SSERegType to, x86SSERegType from); - -//********************* -// 3DNOW instructions * -//********************* -extern void FEMMS( void ); -extern void PFCMPEQMtoR( x86IntRegType to, uptr from ); -extern void PFCMPGTMtoR( x86IntRegType to, uptr from ); -extern void PFCMPGEMtoR( x86IntRegType to, uptr from ); -extern void PFADDMtoR( x86IntRegType to, uptr from ); -extern void PFADDRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFSUBMtoR( x86IntRegType to, uptr from ); -extern void PFSUBRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFMULMtoR( x86IntRegType to, uptr from ); -extern void PFMULRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRCPMtoR( x86IntRegType to, uptr from ); -extern void PFRCPRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from ); -extern void PF2IDMtoR( x86IntRegType to, uptr from ); -extern void PI2FDMtoR( x86IntRegType to, uptr from ); -extern void PI2FDRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFMAXMtoR( x86IntRegType to, uptr from ); -extern void PFMAXRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFMINMtoR( x86IntRegType to, uptr from ); -extern void PFMINRtoR( x86IntRegType to, x86IntRegType from ); - diff --git a/common/src/x86emitter/3dnow.cpp b/common/src/x86emitter/3dnow.cpp deleted file mode 100644 index 737a5e95ac..0000000000 --- a/common/src/x86emitter/3dnow.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "legacy_internal.h" - -//------------------------------------------------------------------ -// 3DNOW instructions [Anyone caught dead using these will be re-killed] -//------------------------------------------------------------------ - -/* femms */ -emitterT void FEMMS( void ) -{ - xWrite16( 0x0E0F ); -} - -emitterT void PFCMPEQMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xB0 ); -} - -emitterT void PFCMPGTMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xA0 ); -} - -emitterT void PFCMPGEMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x90 ); -} - -emitterT void PFADDMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x9E ); -} - -emitterT void PFADDRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x9E ); -} - -emitterT void PFSUBMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x9A ); -} - -emitterT void PFSUBRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x9A ); -} - -emitterT void PFMULMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xB4 ); -} - -emitterT void PFMULRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xB4 ); -} - -emitterT void PFRCPMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x96 ); -} - -emitterT void PFRCPRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x96 ); -} - -emitterT void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xA6 ); -} - -emitterT void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xB6 ); -} - -emitterT void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x97 ); -} - -emitterT void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xA7 ); -} - -emitterT void PF2IDMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x1D ); -} - -emitterT void PF2IDRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x1D ); -} - -emitterT void PI2FDMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x0D ); -} - -emitterT void PI2FDRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x0D ); -} - -emitterT void PFMAXMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xA4 ); -} - -emitterT void PFMAXRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xA4 ); -} - -emitterT void PFMINMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x94 ); -} - -emitterT void PFMINRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x94 ); -} diff --git a/common/src/x86emitter/CMakeLists.txt b/common/src/x86emitter/CMakeLists.txt index b37e22ad3e..6861dd2ec4 100644 --- a/common/src/x86emitter/CMakeLists.txt +++ b/common/src/x86emitter/CMakeLists.txt @@ -93,7 +93,6 @@ endif(CMAKE_BUILD_TYPE STREQUAL Release) # variable with all sources of this library set(x86emitterSources - 3dnow.cpp cpudetect.cpp fpu.cpp groups.cpp diff --git a/common/src/x86emitter/simd.cpp b/common/src/x86emitter/simd.cpp index 0c5715c346..e86c36b9aa 100644 --- a/common/src/x86emitter/simd.cpp +++ b/common/src/x86emitter/simd.cpp @@ -829,13 +829,6 @@ __emitinline void xEXTRACTPS( const xIndirect32& dest, const xRegisterSSE& from, // the FPU results will be invalid. __fi void xEMMS() { xWrite16( 0x770F ); } -// [3DNow] Same as EMMS, but an AMD special version which may (or may not) leave MMX regs -// in an undefined state (which is fine, since presumably you're done using them anyway). -// This instruction is thus faster than EMMS on K8s, but all newer AMD cpus use the same -// logic for either EMMS or FEMMS. -// Conclusion: Obsolete. Just use EMMS instead. -__fi void xFEMMS() { xWrite16( 0x0E0F ); } - // Store Streaming SIMD Extension Control/Status to Mem32. __emitinline void xSTMXCSR( const xIndirect32& dest ) diff --git a/pcsx2/x86/ix86-32/iCore-32.cpp b/pcsx2/x86/ix86-32/iCore-32.cpp index 4344c9c1f4..2170b53324 100644 --- a/pcsx2/x86/ix86-32/iCore-32.cpp +++ b/pcsx2/x86/ix86-32/iCore-32.cpp @@ -849,11 +849,7 @@ void SetFPUstate() { _freeMMXreg(7); if (x86FpuState == MMX_STATE) { - if (x86caps.has3DNOWInstructionExtensions) - FEMMS(); - else - EMMS(); - + EMMS(); x86FpuState = FPU_STATE; } } diff --git a/pcsx2/x86/ix86-32/iR5900-32.cpp b/pcsx2/x86/ix86-32/iR5900-32.cpp index 768ee5c183..f1546e20b8 100644 --- a/pcsx2/x86/ix86-32/iR5900-32.cpp +++ b/pcsx2/x86/ix86-32/iR5900-32.cpp @@ -1072,8 +1072,7 @@ void iFlushCall(int flushtype) _flushConstRegs(); if (x86FpuState==MMX_STATE) { - if (x86caps.has3DNOWInstructionExtensions) FEMMS(); - else EMMS(); + EMMS(); x86FpuState=FPU_STATE; } }