Commit Graph

567 Commits

Author SHA1 Message Date
Jonathan Li 415090d249 common: Avoid wchar_t in pxTextWrapper
wchar_t is 16-bits on Windows, which can't actually properly fit all
Unicode characters.

Use the wx3.0.x wxTextWrapper approach of using iterators that increment
by actual characters to fix the issue, and also switch to using the
std::string style functions in wxString.
2016-12-10 22:30:27 +00:00
Gregory Hainaut 031b6e6372 common: improve vtune merge support
Mapping the full buffer is killer on Vtune (either crash or requires a huge processing time).
Instead keep the same ID for code in the same buffers.

I think all buffers are correctly mapped now but I still miss the frame pointer
for VU code.
2016-12-09 09:28:19 +01:00
Gregory Hainaut b9369e7c00 pcsx2: remove the reserve feature of recompiler memory
Cons:
* requires ~180MB of physical memory (virtual memory is the same so it
  doesn't impact the 4GB limit)

From steam: 98.81% got at least 2GB of RAM. 83.62% got at least 4GB of RAM.
That being said, it might not really increase RAM requirements as OS could put the
new allocation in the swap.

Pro:
* code is much easier
* remove at least half of the signal listener
* last but not least, it is way easier for profiler/debugger
2016-12-09 09:28:19 +01:00
Gregory Hainaut 0453e5cad8 cmake: improve vtune integration
Year is included in the path so search in order 2018/2017/2016

Not ideal but at least all logic is inside the FindVtune module
2016-12-09 09:28:19 +01:00
Gregory Hainaut f41bb8db5e common: forget to format common properly
Moral of the story, don't rely on the commit hook when it isn't installed correctly ;)
2016-11-29 22:59:06 +01:00
Gregory Hainaut 310181b97f common: remove a gcc 4.6 hack
Not supported anymore
2016-11-29 22:59:06 +01:00
Gregory Hainaut c9db1c6c4b vtune: plug PCSX2 core + add missing profiling (VU/VIF/TLB)
Doesn't fully work yet
* Unknown stack frame
* Outside any known module

Potential root cause:
* Nvidia driver
* VU code as ebp is required for emulation so likely no frame
2016-11-28 19:07:04 +01:00
Gregory Hainaut 30a5922a0b pcsx2: reduce std padding to 1 for small screen 2016-11-19 21:52:08 +01:00
Gregory Hainaut 0e2ec9c2cb pcsx2 gui: reduce the padding to 2 for low cost display 2016-11-19 11:27:20 +01:00
Gregory Hainaut 9c598fcd01 common: finally spot the text size bug
GetBestWrappedSize (hence the BestSize) computes the size of
the wrapped text based on box side minus padding.

So the width of the widget is already the good size for text wrapping
2016-11-19 11:21:07 +01:00
Gregory Hainaut 4ee942aba2 pcsx2 gui: use pxGetFixedFont helper instead of wxFont constructor 2016-11-19 11:19:24 +01:00
Clang Format 1fba5cb580 reformat main common directory
Disable some reformat around emitter registers declaration and a massive cases.
2016-11-12 16:52:49 +01:00
Gregory Hainaut 1a8825b374 pcsx2|common|gsdx: use empty() instead of .size() ==/!= 0 check
Enhance readability reported by clang tidy
2016-08-21 17:20:13 +02:00
Jonathan Li c9a1097579 console: Remove buffered and wxerror console writers
Both haven't been used for a long time, and don't seem to hold any
advantages over the default stdout console writer.
2016-08-17 22:07:42 +01:00
Gregory Hainaut 19ceea4f1e Merge branch 'strict-aliasing' 2016-08-17 18:53:08 +02:00
Gregory Hainaut 2700f06fe7 Merge branch 'pcsx2-verbose-thread-error' 2016-08-14 22:31:28 +02:00
Gregory Hainaut 9d8135cf1c x86emitter: allow strict aliasing optimization 2016-08-14 21:01:40 +02:00
Gregory Hainaut 2cc98191f0 common: allow strict aliasing optimization 2016-08-14 21:01:40 +02:00
Gregory Hainaut e8e66ec4b5 x86emitter: use memcpy to avoid aliasing issue
Code is only called once anyway.
2016-08-14 20:48:45 +02:00
Gregory Hainaut 5ad4cbace7 onepad|common: fix GCC warning type limit 2016-08-12 19:30:14 +02:00
Gregory Hainaut 078577c7c5 common: try to print a nice error message when pthread_create is bad 2016-08-12 10:05:14 +02:00
Jonathan Li ed47dca8a1 x86emitter:windows: Make cpu detection/affinity 64-bit compatible
Use DWORD_PTR since that works on both 32-bit and 64-bit builds. And
remove some empty unused functions.

Fixes a 64-bit compilation issue.
2016-07-24 19:05:18 +01:00
Jonathan Li 768ed80ece utilities:threading:windows: Use intrinsic pause
Fixes a 64-bit compile error.
2016-07-23 02:21:13 +01:00
Gregory Hainaut 7d35e15fea Merge pull request #1444 from PCSX2/atomic-relax
Atomic relax
2016-07-22 18:36:02 +02:00
Gregory Hainaut c56ca4a0fa common: include cpuid.h on unix
I tested both clang and gcc.
2016-07-17 10:24:29 +02:00
Gregory Hainaut 10ea05bc6f common: remove old atomic wrapper
Use cross-platform std::atomic instead
2016-07-14 18:29:41 +02:00
Gregory Hainaut 812e41d578 common: relax atomic of m_IsBeingDeleted
Avoid the memory fence in the constructor
2016-07-14 18:29:41 +02:00
Akash 72661e7c16 PCSX2-Core: Clean up some warnings on MSVC
x86emitter : Convert variable type from u8 to bool.
recVTLB: Cast "sign" to bool to prevent a warning.
R5900OpcodeImpl: Cast all the values in array to u64 instead of s64.
2016-06-30 16:49:18 +05:30
Jonathan Li 79d019b5bb utilities: Don't use TLS buffers in FastFormatString classes (#1430)
The TLS buffers used by the FastFormatUnicode and FastFormatAscii
classes seem to be responsible for PCSX2 not terminating properly on
Windows under certain conditions (using MTVU before commit
1111e03901, using CDVDgigaherz without a
disc, possibly other conditions).

When PCSX2 shut downs and the FastFormatBuffers are being cleaned up,
the call to pthread_key_delete() would end up calling
WaitForSingleObject(e, INFINITE) and waiting indefinitely for an event
to trigger. It never does get triggered (for reasons unknown) and
therefore PCSX2 doesn't terminate properly.

Remove the usage of TLS buffers in the FastFormatString classes - it
fixes the termination issue on Windows and doesn't seem to have much
effect on performance.
2016-06-29 13:13:51 +01:00
Jonathan Li 3904c67e6e utilities: Use Bind instead of Connect 2016-06-17 00:03:58 +01:00
Jonathan Li c10728319b utilities: Use Bind compatible event declarations/definitions 2016-06-16 23:49:34 +01:00
FlatOutPS2 f1ba9c9d6a PCSX2-WX: MainFrame keyboard navigation improvement (#1388)
Adding shortcuts to all the menu options, that only some of the options
in the Config tab already had.

Also update translations so menus are still localised (well, mostly).
2016-06-08 21:48:16 +01:00
Jonathan Li 7aa6564dcc common:freebsd: Fix compilation 2016-05-20 22:32:41 +01:00
Jonathan Li 280ca1dd85 utilities: Add FreeBSD thread name implementation 2016-05-20 22:32:41 +01:00
Jonathan Li f78d1a4018 utilities: Remove wx2.8 code and uses of wxMAJOR_VERSION 2016-04-29 00:09:47 +01:00
adamantike a0eca54f96 Trivial fix on wxFont style/weight usage 2016-04-24 13:25:56 -03:00
Jonathan Li dda44519c1 pcsx2|utilities: Use non-deprecated wxFont stuff 2016-04-23 13:57:42 +01:00
Gregory Hainaut c44f605b5e x86emitter: gcc 6 compilation fix
Fix #1297
2016-04-18 19:27:06 +02:00
Gregory Hainaut 791a0ce702 common: initialize scalar field of pxThread
CID 147022

v2: initialize all member in initializer list
2016-03-30 19:55:45 +02:00
Gregory Hainaut 37de84d55f x86emitter: initialize scalar field
CID:147038
2016-03-30 19:50:41 +02:00
Gregory Hainaut de24ce0a8f x86emitter: miss comas here 2016-03-28 18:10:39 +02:00
Gregory Hainaut 3d5c1b4ef8 Core|Common: restore old interlocked add/sub behavior
interlocked* returns the new value whereas fetch_add/sub returns the old value.
2016-02-29 21:43:56 +01:00
Gregory Hainaut 610bf8a277 Common: delete most of the deprecated atomic API 2016-02-28 15:29:31 +01:00
Gregory Hainaut 5ca92ecd67 Common: port code to std::atomic 2016-02-28 15:29:31 +01:00
Gregory Hainaut 89fad4d3ad common: port ScopedPtrMT to std::atomic
v2: s/NULL/nullptr/
v3: tentative fix for MSVC
// ScopedPtrMT.h(91, 0): error C2593: 'operator ==' is ambiguous
2016-02-28 15:29:00 +01:00
Gregory Hainaut a66c911fed cmake: factorize debug/dev define 2016-02-21 16:17:10 +01:00
Jonathan Li e92636ab1a utilities: Remove ScopedPtr and pxObjPtr implementation
Both are now unused.
2016-02-08 22:31:45 +00:00
Jonathan Li a74677acf7 utilities: Convert ScopedPtr to unique_ptr 2016-02-08 22:31:45 +00:00
Jonathan Li 92bb849e7c Use unique_ptr instead of ScopedPtr for exceptions 2016-02-08 22:31:45 +00:00
Gregory Hainaut 5611333c29 PCSX2: remove reporting of mmx/3dnow 2016-02-08 09:16:52 +01:00
Gregory Hainaut 5140a2e107 x86emitter: remove MMX support 2016-02-08 09:13:24 +01:00
Jonathan Li 04a8efd8c3 pcsx2|common: Use _WIN32 for Windows preprocessor macro
It's predefined, unlike WIN32 and _WINDOWS (and other variants), which
are defined in the property sheets.
2016-01-27 22:41:45 +00:00
Gregory Hainaut 53e24a8e30 x86emitter: fix an useless gcc warning on int/uint cast 2016-01-27 10:27:34 +01:00
Gregory Hainaut 6dd83d3cba x86emitter: there are 16 int registers for all sizes. 2016-01-21 22:34:13 +01:00
Gregory Hainaut 9e773ff980 Merge pull request #1123 from PCSX2/emitter-Trex
Emitter trex
2016-01-21 22:32:37 +01:00
Gregory Hainaut a2a23579bd Merge pull request #1122 from PCSX2/emitter-64b
Emitter 64b
2016-01-21 22:31:01 +01:00
Gregory Hainaut 1a700145ec x86emitter: remove unused FPU opcode
Future code would rely on SSE anyway
2016-01-20 10:23:23 +01:00
Gregory Hainaut 41a80fce20 x86emitter: finally support 64 bits instructions
Note: a couple of instructions don't support REX prefix. Some
exception ought to be implemented later
2016-01-17 17:02:38 +01:00
Gregory Hainaut 40438cf2bd x86emitter: port couple of simd instrusction to xOpWrite0F template 2016-01-17 16:59:44 +01:00
Gregory Hainaut 9ac22ee9aa x86emitter: rewrite remaining function to use generic template 2016-01-17 16:42:39 +01:00
Gregory Hainaut fc5e293ef6 x86emitter: rewrite move to use generic template 2016-01-17 13:44:29 +01:00
Gregory Hainaut 25cd35147e x86emitter: rewrite groups to use generic template 2016-01-17 12:34:44 +01:00
Gregory Hainaut d2436fa86d x86emitter: remove unused function 2016-01-17 12:07:41 +01:00
Gregory Hainaut 16057d8b04 x86emitter: inc/dec are illegal on x86_64 2016-01-17 12:07:03 +01:00
Gregory Hainaut f2ecfc99ad x86emitter: align EmitRex interface on EmitSibMagic 2016-01-17 12:06:08 +01:00
Gregory Hainaut e50e9a5e65 x86emitter: sed/32orLess/64orLess/ 2016-01-17 00:29:19 +01:00
Gregory Hainaut 395d43fd9c x86emitter: jump: use base type directly
which fix 16 bits call (no prefix)
2016-01-17 00:21:05 +01:00
Gregory Hainaut 968af6148e x86emitter: extend SSE instruction type 2016-01-17 00:21:05 +01:00
Gregory Hainaut 4bc9cbc24f x86emitter: extend lea/bswap 2016-01-17 00:21:05 +01:00
Gregory Hainaut eb4db2152c x86emitter: add x64 to push/pop 2016-01-17 00:21:05 +01:00
Gregory Hainaut ef21a8dbd0 x86emitter: extend group8 type 2016-01-17 00:21:05 +01:00
Gregory Hainaut 39a6bda52d x86emitter: extend test & bitscan type
Factorize the code to support any types
2016-01-17 00:21:05 +01:00
Gregory Hainaut e285036455 x86emitter: shift: extend it to 64 bits type 2016-01-17 00:21:05 +01:00
Gregory Hainaut fdaf0e9979 x86emitter:group: uses base type
Add 64 bits support for free ;)

Note: 64b still requires the REX prefix
2016-01-17 00:21:05 +01:00
Gregory Hainaut e2602b3967 x86emitter:move: factorize type and extend it to 64 bits
It's still missing the REX prefix support
2016-01-17 00:21:05 +01:00
Gregory Hainaut be0b8cf2f5 x86emitter: implement some function to emit the REX prefix
Same fashion as EmitSibMagic
2016-01-17 00:10:21 +01:00
Gregory Hainaut 53b5ecf34a x86emitter: add the new x86_64 registers set 2016-01-17 00:10:21 +01:00
Gregory Hainaut 1328865279 x86emitter: xAddressReg size will depend on the arch
Note: displacement are never 8B. The max is 4B which is sign extended to 8B.
So we can't store a pointer into it anymore.

Add xRegisterLong that will be x64 on 64 bits and x32 on 32 bits
2016-01-17 00:10:21 +01:00
Gregory Hainaut 6e66bea152 x86emitter: improve the various abi wrapper
V2:
* Add various option to handle the different frame
* Basic x86-64 port (untested so likely completely broken)

v3:
Create an templated xImpl_FastCall object

v4:
clang compilation fix
2016-01-11 09:21:32 +01:00
Gregory Hainaut 92d7639267 profiler: add functions to plug linux Perf Event on JIT
Basically it creates a /tmp/perf-`pid`.map file which will contains
a mapping of the x86 code with the EE/IOP/VU code

* You need to enable the profiler with a define
* You can split the profiling by block (inside a recomp buffer)

v2: add new file to VS xml files
v3: remove useless include
2016-01-10 13:42:59 +01:00
Gregory Hainaut 50c7cb1717 x86emitter: implement some BMI instructions
Only a couple of one to do some memory profiling
2016-01-09 23:29:01 +01:00
Gregory Hainaut 29b0b17f50 x86emitter: add BMI1 & BMI2 instruction detection 2016-01-09 22:59:31 +01:00
Gregory Hainaut 834cc3f2c5 core|x86emitter: port basic jump instruction 2016-01-09 21:26:25 +01:00
Gregory Hainaut 60a9463e7a x86emitter: remove unused legacy function
And mark the remaining one as deprecated

Clang only as it relies on C++14
2016-01-09 21:13:29 +01:00
Gregory Hainaut 74db92bee4 Merge pull request #978 from juhalaukkanen/apple_osx_master_merge
OSX 32bit build
2016-01-08 20:09:37 +01:00
Gregory Hainaut 4f28403c03 Merge pull request #972 from PCSX2/clean-gcc-opt-cmake
cmake: reenable a couple of missing gcc optimization
2016-01-08 19:32:18 +01:00
Gregory Hainaut 21445fe0d0 x86emitter: Add several architecture dependant wrapper
* A nice object to create the stack frame
* Various xStdCall/xFastCall to emulate standard & fast call
2015-12-02 19:06:52 +01:00
Juha Laukkanen 7edf747e84 Darwin/OSX Mutex & MAP_ANON vs. MAP_ANONYMOUS.
OSX compilation fix: mutex: Windows
2015-12-02 05:00:23 +02:00
Jonathan Li 57ad97d212 x86emitter: Remove bool_to_char
It was unused.
2015-11-29 10:58:32 +00:00
Jonathan Li 4d97089990 x86emitter: Fix Windows AVX2 detection
Technically it did work, but it was undefined behaviour. Use __cpuidex,
which allows setting ecx as well.

Also fix the _xgetbv intrinsic - I have no idea how PCSX2 even
compiled on Windows.
2015-11-29 10:57:51 +00:00
Gregory Hainaut 9aec4229d5 x86emitter: support AVX2 (linux only?)
Nah kidding, it is only the cpu detection for the log

x86 Features Detected:
	SSE2.. SSE3.. SSSE3.. SSE4.1.. SSE4.2.. AVX.. AVX2.. FMA
2015-11-28 23:40:15 +01:00
Gregory Hainaut 02186d5a54 x86emitter: always use fxsave intrinsic/asm 2015-11-28 22:19:42 +01:00
Gregory Hainaut d5efd6eacb x86emitter: remove the never called SIMD_ExceptionTest function 2015-11-28 22:02:08 +01:00
Juha Laukkanen f813b9e25b Darwin/OSX semaphore & thread & os backend. 2015-11-17 19:30:20 +02:00
Gregory Hainaut 21857ec12d Merge pull request #967 from PCSX2/remove-lazy-allocation
Reduce lazy allocation
2015-11-15 00:12:07 +01:00
Gregory Hainaut d5830ef708 cmake: reenable a couple of missing gcc optimization 2015-11-14 09:54:09 +01:00
Gregory Hainaut 4bfb60865c common: ifdef x64 specific code
gcc warning:  set but unused
2015-11-12 12:10:49 +01:00
Gregory Hainaut 7565bcc789 ee: drop SpatialArrayReserve allocator
Let's the kernel manage the memory either with builtin lazy allocation or
swapped memory.

Avoid to handle SIGSEGV manually (nicer for debug) and removes 250 lines of code.
2015-11-12 10:35:10 +01:00
Gregory Hainaut 870e799baa memcpy: remove AMD copyright
memcmp comes from zerofrog (him or external) but likely not AMD

https://www.cs.virginia.edu/stream/FTP/Contrib/AMD/memcpy_amd.asm
2015-11-07 15:57:34 +01:00
Jonathan Li 08dfa20da1 utilities:linux: Add function to change stdout stream
stdout is not necessarily at stdout - at least not after I'm done with it.
2015-10-31 13:50:02 +00:00