mirror of https://github.com/PCSX2/pcsx2.git
a69cfcc464
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1114 96395faa-99c1-11dd-bbfe-3dabce05a288 |
||
---|---|---|
.. | ||
ix86 | ||
ix86-32 | ||
BaseblockEx.cpp | ||
BaseblockEx.h | ||
Makefile.am | ||
README | ||
aMicroVU.S | ||
aR3000A.S | ||
aVUzerorec.S | ||
aVif.S | ||
aVif.asm | ||
fast_routines.S | ||
fast_routines.cpp | ||
iCOP0.cpp | ||
iCOP0.h | ||
iCOP2.cpp | ||
iCore.cpp | ||
iCore.h | ||
iFPU.cpp | ||
iFPU.h | ||
iFPUd.cpp | ||
iMMI.cpp | ||
iMMI.h | ||
iPsxMem.cpp | ||
iR3000A.cpp | ||
iR3000A.h | ||
iR3000Atables.cpp | ||
iR5900.h | ||
iR5900Arit.h | ||
iR5900AritImm.h | ||
iR5900Branch.h | ||
iR5900Jump.h | ||
iR5900LoadStore.h | ||
iR5900Misc.cpp | ||
iR5900Move.h | ||
iR5900MultDiv.h | ||
iR5900Shift.h | ||
iVU0micro.cpp | ||
iVU1micro.cpp | ||
iVUmicro.cpp | ||
iVUmicro.h | ||
iVUmicroLower.cpp | ||
iVUmicroUpper.cpp | ||
iVUops.h | ||
iVUzerorec.cpp | ||
iVUzerorec.h | ||
iVif.cpp | ||
ir5900tables.cpp | ||
microVU.cpp | ||
microVU.h | ||
microVU_Alloc.h | ||
microVU_Alloc.inl | ||
microVU_Analyze.inl | ||
microVU_Compile.inl | ||
microVU_Execute.inl | ||
microVU_Log.inl | ||
microVU_Lower.inl | ||
microVU_Misc.h | ||
microVU_Misc.inl | ||
microVU_Tables.inl | ||
microVU_Upper.inl |
README
PCSX2 x86 Recompilers - zerofrog(@gmail.com) There are two types of x86 recompilers: x86-32 and x86-64. The code that both of them share is in the x86/ directory. Code for x86-32 is in the ix86-32/ and same goes for x86-64. The ix86/ dirctory contains the low level translation of x86 instructions to actual code, it is written to be used for both architectures. There are a lot of places where it was hard to separate 32bit from 64bit recompilers, so a lot of functions are surrounded by "#if(n)def __x86_64__" statements. It would be simple if the story ended here, but hte x86 recompilers use a lot of low level assembly routines, meaning that assembly has to be compiled for both windows x32/x64 versions and linux x32/x64 versions. For windows, the masm assembler is used (*.asm files) For linux, gcc is used (*.S files) Both assemblers use very different syntax, also some routines in x86-64 differ a lot from their 32bit counterparts. Therefore, you might see the same function implemented up to 4 times in assembly. (no, it's not fun maintaining 4 versions of the same thing... and it might be easier to use nasm, but that probably has its own unforseeable problems)