x86_64 code generation

Developers
2008-11-27
2013-04-22
  • Dylan Simon
    Dylan Simon
    2008-11-27

    It seems that the current ix86-64 code is completely broken.  I get the impression that no one has made pcsx (or any other psx emu) work in 64-bit mode.  The problems I've found are primarily related to addressing, with a few register issues.  I've started fixing all the addressing code, and it gets a bit farther each time before crashing.

    Is what's in CVS the latest ix86-64 code, and does anyone know if anyone else has done any more work on this?  I would presume there's not much interest since most people are happy to install all the 32-bit libraries.  Secondly, if I do manage to make this work, or at least make noticeable progress towards that end, is anyone interested in getting it checked in?

    :-Dylan

     
    • Dylan Simon
      Dylan Simon
      2008-11-29

      I've made it work.  I'm still testing, and there still seems to be a slight video issue, but it seems playable and so far hasn't crashed.  I'm interested in getting this in and getting feedback.  Thoughts?

       
    • Stephen Chao
      Stephen Chao
      2008-11-30

      x86_64 code is complete...sort of.  I did the port, but it was in a fragile state as I relied on some memory conventions in GCC.  It broke after I stopped working on PCSX; specifically the game debugger added in 1.9 brought psxRegs into the wrong memory location after being loaded by the GUI before the library.  Latest x86_64 code is working in v1.818
      http://pcsx-df.game-host.org

       
      • Dylan Simon
        Dylan Simon
        2008-11-30

        Thanks for the response!  I see -- so the solution was to make sure all the memory referenced by the recompiled code is within +-2G of recMem.  Unfortunately, this seems to rely on the mmaps actually mapping to the suggested places, which wasn't happening for me, so things were still crashing.  I've gone through and made all the addressing in the generated code more robust to allow full 64-bit addresses when they exceed this range.  I've also fixed cpudetect (which crashes on amd), reduced the excess space in psxRecLUT, and made some effort to reunify ix86_64 and ix86 (though this part isn't done).  I doubt anything non-GCC will work on mine either, though.  The current diff is here (though I'm still working on improvements): https://dylex.net:9947/src/pcsx-df-amd64.diff