dolphin/Source
Pierre Bourdon 3990002250 Optimize JitCache::InvalidateICache by maintaining a "valid blocks" bitset
Most of the InvalidateICache calls are for a 32 bytes block: this is the
number of bytes invalidated by PowerPC dcb*/icb* instructions. Profiling
shows that a lot of CPU time is spent checking if there are any JIT blocks
covered by these 32 bytes (using std::map::lower_bound).

This patch adds a bitset containing the state of every 32 bytes block in
RAM (JIT cached/not JIT cached). Using that, a 32 bytes InvalidateICache
can check in the bitset if any JIT block might be invalidated. A bitset
check is a lot faster than an std::map::lower_bound operation, improving
performance of JitCache::InvalidateICache by more than 100%.

Some practical numbers:

* Xenoblade Chronicles (PAL)
  56.04FPS -> 59.28FPS (+5.78%)
* The Last Story (PAL)
  30.9FPS -> 32.83FPS (+6.25%)
* Super Mario Galaxy (PAL)
  59.76FPS -> 62.46FPS (+4.52%)

This function still takes more time than it should - more optimization in
this area might be possible (specializing for 32 bytes blocks to avoid
useless memcpy, for example).
2012-10-06 01:49:09 +02:00
..
Core Optimize JitCache::InvalidateICache by maintaining a "valid blocks" bitset 2012-10-06 01:49:09 +02:00
DSPSpy llejit - fix for flag generation code + dspspy jit workaround 2011-04-15 13:04:20 +00:00
DSPTool Remove scons-related files 2012-03-25 12:55:02 -07:00
Plugins Implement a simple benchmarking mode which logs FPS to a file 2012-10-04 05:41:02 +02:00
TestSuite drop vs2008 projects in favor of vs2010 2011-02-11 15:43:05 +00:00
UnitTests Remove scons-related files 2012-03-25 12:55:02 -07:00
VSProps Merge branch 'master' into wxw3-update 2012-03-22 17:57:38 -07:00
CMakeLists.txt Add the DSPTool and UnitTests to the cmake build. They are optional, and to enable them add -DDSTPTOOL and -DUNITTESTS to the cmake command line. 2011-07-18 01:47:55 +00:00
Dolphin_2010.sln Make sure updating scmrev.h causes a rebuild of dependant projects. 2012-03-19 03:40:14 -07:00