{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":22384003,"defaultBranch":"master","name":"lightrec","ownerLogin":"pcercuei","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-07-29T15:04:39.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/403272?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1703420930.0","currentOid":""},"activityList":{"items":[{"before":"e610a95ad86e32d27ee3e8e44f462647e8811c4e","after":"ea20362c9542f12fb6a0f27aa7df66b2af06b84d","ref":"refs/heads/master","pushedAt":"2024-09-02T10:53:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"constprop: Fix constant propagation with additions\n\nThe algorithm did not take into account that if we know i.e. 20 sign\nbits of both A and B, we may not know 20 sign bits of A + B but only 19.\n\nThis fixes the demo of Gran Turismo crashing before the main menu.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"constprop: Fix constant propagation with additions"}},{"before":"a91a7c3c4b640572a725e5b2fc31322c18b0357d","after":"e610a95ad86e32d27ee3e8e44f462647e8811c4e","ref":"refs/heads/master","pushedAt":"2024-07-24T11:28:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"emitter: Factorize code in rec_store* functions\n\nFactorize the code by doing the byte-swap first before the store.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"emitter: Factorize code in rec_store* functions"}},{"before":"aa9b6c64b80fde32ae952d4ba2028e0473f601bc","after":"a91a7c3c4b640572a725e5b2fc31322c18b0357d","ref":"refs/heads/master","pushedAt":"2024-07-17T23:40:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"emitter: Use rec_and_mask() in rec_load_direct()\n\nUse the fast-mask feature of compatible archs to apply a mask to the\naddress register instead of unconditionally loading the mask into a\nregister before applying it.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"emitter: Use rec_and_mask() in rec_load_direct()"}},{"before":"601afca8e889bdda7040ff5c64f7bbd20d1d5f2c","after":"aa9b6c64b80fde32ae952d4ba2028e0473f601bc","ref":"refs/heads/master","pushedAt":"2024-07-17T22:08:41.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Preload memory mask on archs without fast mask\n\nOn archs that cannot apply the memory mask to the address registers in a\nsingle opcode, the mask has to be loaded as an immediate value to a\nseparate register.\n\nFor those archs, preload the memory mask into JIT_R1.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Preload memory mask on archs without fast mask"}},{"before":"5d59fb9fffe1203a31ff78c5f71b13b31794ffdf","after":"601afca8e889bdda7040ff5c64f7bbd20d1d5f2c","ref":"refs/heads/master","pushedAt":"2024-07-15T20:09:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"optimizer: Do not swap load opcodes when next op is a branch\n\nThere is an actual one-instruction delay between the moment a load\nopcode is decoded, and the moment the new value is available in the\ntarget register; and therefore, if the very next instruction reads the\ntarget register, it will read the old value of the register, not the new\none.\n\nThis setup is actually very rare, because if an interrupt fires at the\nright time, the second opcode will read the new value of the register,\nmaking this setup unreliable.\n\nTo support OpenBIOS which uses this setup in its memory card code,\nLightrec will attempt to swap the load opcode with the next opcode.\n\nThis obviously does not work when the second opcode is a branch. In that\ncase, by lack of a better way to handle it, it's better to just ignore\nthe setup completely, as it does more harm than good.\n\nThis fixes a crash in \"Goemon Shin Sedai Shuumei\".\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"optimizer: Do not swap load opcodes when next op is a branch"}},{"before":"7021f1f0245395a67be274423d63c38f267bc5b9","after":"5d59fb9fffe1203a31ff78c5f71b13b31794ffdf","ref":"refs/heads/master","pushedAt":"2024-06-24T10:07:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"emitter: Work around some false-positive warnings\n\nInitialize some variables to address warnings from GCC about use of\nuninitialized variables, which actually cannot happen but GCC doesn't\nhave a way to know that.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"emitter: Work around some false-positive warnings"}},{"before":"3d4e83915761aebda52e49ffc1e7dc92b044d16e","after":"7021f1f0245395a67be274423d63c38f267bc5b9","ref":"refs/heads/master","pushedAt":"2024-06-24T10:04:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"arch: Mark Aarch64 as having fast mask\n\nAarch64 can use the UBFX instruction to apply a low mask.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"arch: Mark Aarch64 as having fast mask"}},{"before":"5595c760f146c48ab2f8d28364888329fa2fd5fe","after":"3d4e83915761aebda52e49ffc1e7dc92b044d16e","ref":"refs/heads/master","pushedAt":"2024-06-24T09:58:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"SH4: Re-introduce option to use GBR as state pointer\n\nThe jury is still out on this one.\n\nInstead of unconditionally using the GBR register as the state pointer,\nadd a CMake option to toggle between the two modes.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"SH4: Re-introduce option to use GBR as state pointer"}},{"before":"63e9876e0c2b8bf613620b7b14bb97306af004af","after":"5595c760f146c48ab2f8d28364888329fa2fd5fe","ref":"refs/heads/master","pushedAt":"2024-06-23T19:24:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"emitter: Optimize rec_and_mask()\n\nDifferentiate between archs that have a way to mask a register quickly,\nand those who need to cache the mask into a register.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"emitter: Optimize rec_and_mask()"}},{"before":"bd0b82792284f22566bbfc78d8882e1e91b10516","after":"63e9876e0c2b8bf613620b7b14bb97306af004af","ref":"refs/heads/master","pushedAt":"2024-06-18T10:15:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"Fix some more uint32_t print formats, once again\n\nThe last ones (tm).\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"Fix some more uint32_t print formats, once again"}},{"before":"62dbfe4b522d69c838fab6704ad79de87d78b837","after":"bd0b82792284f22566bbfc78d8882e1e91b10516","ref":"refs/heads/master","pushedAt":"2024-06-06T10:01:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"Fix some more uint32_t print formats\n\nThese should be the last ones.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"Fix some more uint32_t print formats"}},{"before":"2aa14537ba5643934b3340d8071be41378370fec","after":"62dbfe4b522d69c838fab6704ad79de87d78b837","ref":"refs/heads/master","pushedAt":"2024-06-04T10:34:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Reorder code in dispatcher\n\n- Move the code handling memset, load delays and impossible branches\n further down the function. This makes the general code path closer\n together, making it more cache-friendly.\n\n- Change the place where next PC is stored back to to the lightrec_state\n structure from before a branch, to after the branch in each of the two\n paths. Even though this duplicates code, it allows to fill a load\n delay, as the code would previously load the function pointer from the\n code LUT and immediately NULL-check it. By moving the store between\n the LUT load and the NULL-check, the load delay is reduced and the\n code is faster.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Reorder code in dispatcher"}},{"before":"ccd6e0d669956b9833dceff6c5ea1110d43608b5","after":"2aa14537ba5643934b3340d8071be41378370fec","ref":"refs/heads/master","pushedAt":"2024-06-03T17:03:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"Simplify call to C wrapper\n\nInstead of loading the address of the wanted C wrapper into the JIT_R1\nregister, the emitter will simply load a pre-shifted offset into JIT_R1.\n\nThis makes the C wrapper much simpler, as the jump table can be dropped.\nIt is also faster, at least on Dreamcast.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"Simplify call to C wrapper"}},{"before":"c38ea0efb7ef6bb36cfeabf192991221ed8a0fc2","after":"ccd6e0d669956b9833dceff6c5ea1110d43608b5","ref":"refs/heads/master","pushedAt":"2024-06-03T09:33:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Add macro lightrec_offset()\n\nReplace 'offsetof(struct lightrec_state, x)' by 'lightrec_offset(x)'\nwhich is simpler to read and avoids breaking many lines.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Add macro lightrec_offset()"}},{"before":"caffa935213e0afd82a535b519340ce791b5134d","after":"c38ea0efb7ef6bb36cfeabf192991221ed8a0fc2","ref":"refs/heads/master","pushedAt":"2024-06-02T20:57:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"emitter: Remove counter-productive optimization for MOV meta-opcode\n\nPreviously, the generator code for the MOV meta-opcode checked that if\nthe source register was not loaded, its value would be loaded directly\ninto the target register.\n\nHowever, this was counter-productive, as at that point of the code we\nknow that the source register will eventually be used (as the opcode\ndoes not have the \"unload rs\" or \"discard rs\" flags). Loading its value\ndirectly into the target register meant that the value would eventually\nbe loaded once again from the register cache into the source register.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"emitter: Remove counter-productive optimization for MOV meta-opcode"}},{"before":"8d3db1a4e76c7b81301013f18650011b7e5eabf3","after":"caffa935213e0afd82a535b519340ce791b5134d","ref":"refs/heads/master","pushedAt":"2024-05-29T23:11:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"Fix uint32_t print formats not using PRIx32\n\nThe proper cross-platform way to print a uint32_t as a hexadecimal is to\nuse PRIx32.\n\nAdd a new X32_FMT and use it in places where it applies.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"Fix uint32_t print formats not using PRIx32"}},{"before":"2f767de4045d63f64c519955301c240b9d52b132","after":"8d3db1a4e76c7b81301013f18650011b7e5eabf3","ref":"refs/heads/master","pushedAt":"2024-05-17T17:27:11.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Free all blocks when changing ratio of cycles per opcode\n\nIf the ratio of cycles per opcode has changed, all the previously\ncompiled blocks are now invalid, and have to be dropped.\n\nPause the threaded recompiler (so that it won't try to compile blocks\nwe're about to remove), reap any pending data, then free all blocks and\nunpause the threaded compiler.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Free all blocks when changing ratio of cycles per opcode"}},{"before":"b33982e622886bf0added490abb23eef46babd8a","after":"2f767de4045d63f64c519955301c240b9d52b132","ref":"refs/heads/master","pushedAt":"2024-05-17T11:27:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"Work-around Lightning bug for x86\n\nLightning's code size estimation routine is buggy on x86 and will return\na value that's too small. This causes jit_emit() to fail.\n\nWork around that issue by artificially growing the pre-allocated buffer,\nwhich is fine (although not ideal) because the buffer will be trimmed to\nfit afterwards.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"Work-around Lightning bug for x86"}},{"before":"25ccaadd56ab9ba2c54024997a61101d1f614fc5","after":"b33982e622886bf0added490abb23eef46babd8a","ref":"refs/heads/master","pushedAt":"2024-05-16T23:04:24.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Free pre-allocated code buffer if Lightning fails\n\nIf for some reason Lightning fails to emit code, and jit_emit() returns\nNULL, free the code buffer that was pre-allocated for it.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Free pre-allocated code buffer if Lightning fails"}},{"before":"c54df45ef1940df2a7afd7c01db734afbfe35b80","after":"25ccaadd56ab9ba2c54024997a61101d1f614fc5","ref":"refs/heads/master","pushedAt":"2024-05-14T19:17:25.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Prefer to use low mask in LUT entry computation\n\nDoing an AND 0x1fffff is generally easier than an AND 0x101fffff, for\nsome architectures. For instance, MIPS32r2 and PowerPC can apply the low\nmask in just one instruction, without having to load the immediate value\ninto a register.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Prefer to use low mask in LUT entry computation"}},{"before":"9b009b609162b28bd1b666133212d520e582dcbf","after":"c54df45ef1940df2a7afd7c01db734afbfe35b80","ref":"refs/heads/master","pushedAt":"2024-05-13T18:44:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"recompiler: Fix host CPU detection\n\nThe code used an unsigned variable to store the processor count. However\nthe return value of sysconf() can be negative to indicate errors.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"recompiler: Fix host CPU detection"}},{"before":"c45f4d3071049226c329ebadf73ddf7359f5b35f","after":"9b009b609162b28bd1b666133212d520e582dcbf","ref":"refs/heads/master","pushedAt":"2024-01-14T20:24:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"optimizer: Disable broken part of the MULT/DIV optimization\n\nDisable the optimization that will modify the MULT/DIV opcodes to write\ndirectly to the targets of the detected MFLO/MFHI, because the algorithm\nis not good enough and will cause issues.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"optimizer: Disable broken part of the MULT/DIV optimization"}},{"before":"4f9e219810618419b76250a02252233904063ce0","after":"c45f4d3071049226c329ebadf73ddf7359f5b35f","ref":"refs/heads/master","pushedAt":"2023-12-24T12:28:46.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"CMake: Bump to version 0.9\n\n59 commits since v0.8.\n\nNotable changes:\n- Temporary immediate values are now cached in registers\n- Registers are re-used as much as possible\n- Supports specifying a custom cycles-per-opcode value\n- Support running with the HLE BIOS in PCSX\n- The threaded recompiler is finally stable and race-free\n- Better priority system in the threaded compiler\n- Drop support for unequal memory offsets to simplify code\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"CMake: Bump to version 0.9"}},{"before":"c5918ac08277004ecd53f6af185d58a96f37436d","after":"4f9e219810618419b76250a02252233904063ce0","ref":"refs/heads/master","pushedAt":"2023-12-24T00:04:28.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"emitter: Reduce register usage of rec_load_direct()\n\nIn some cases it was allocating a temporary register without using it\nanywhere.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"emitter: Reduce register usage of rec_load_direct()"}},{"before":"d88760e40c1d2a5698c7b6f6a53cce31fda799f0","after":"c5918ac08277004ecd53f6af185d58a96f37436d","ref":"refs/heads/master","pushedAt":"2023-12-23T19:23:28.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"constprop: Improve constant propagation of SRA / SRAV\n\nUnless we know the value of the 31th bit, we can always consider that it\nis a sign bit. This is generally not very interesting to know, except\nwith SRA / SRAV, where the sign bit is copied to its right according to\nthe shift value.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"constprop: Improve constant propagation of SRA / SRAV"}},{"before":"42e192eeec97938eb89b33eb09482acc7be5ba2e","after":"d88760e40c1d2a5698c7b6f6a53cce31fda799f0","ref":"refs/heads/master","pushedAt":"2023-12-14T18:09:53.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"CMake: Enable threaded compiler by default\n\nThe threaded compiler is finally stable and race-free, and can now be\nenabled by default.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"CMake: Enable threaded compiler by default"}},{"before":"b8ce1f3dab45d7c665aa406a0ff183ae6565205d","after":"42e192eeec97938eb89b33eb09482acc7be5ba2e","ref":"refs/heads/master","pushedAt":"2023-12-13T18:56:44.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Only read block cache once when compiling block\n\nReading it twice is a race vs. the main thread. The scenario is, when\ncompiling block 1, covering blocks 2 and 3, those last two are marked\nas dead. Meanwhile, the main thread wants to execute block 2, sees that\nit is marked as dead, and will re-create a brand new block 2 at the same\nblock LUT address. When the threaded compiler re-loads all the blocks to\ndestroy them (with the reaper), it will then get a pointer to the new\nblock 2, instead of a pointer to the old block 2.\n\nAddress this issue by using a huge local array that will be filled with\npointers to the blocks covered by the block being compiled; then the\ncorrect blocks will be destroyed even if their respective entries in the\ncode LUT now point to freshly re-generated blocks.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Only read block cache once when compiling block"}},{"before":"d4b70e0fce940e988a402a163ac2ebbf88c00c26","after":"b8ce1f3dab45d7c665aa406a0ff183ae6565205d","ref":"refs/heads/master","pushedAt":"2023-11-24T22:47:08.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"interpreter: Fix fully tagged blocks being recompiled\n\nThe dispatcher would call into the interpreter to handle load delay\nslots. The interpreter would load the opcode at the branch target from\nRAM, and initialize a 'struct opcode' with the flags set to 0x0.\n\nThis caused lightrec_rw() to try to tag the opcode, and request a\nrecompilation of the block, even if the block was fully compiled.\n\nThis fixes crashes in Formula One Arcade.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"interpreter: Fix fully tagged blocks being recompiled"}},{"before":"109d0a6ba35d0279b9d0bf5bacafabc2d634af7b","after":"d4b70e0fce940e988a402a163ac2ebbf88c00c26","ref":"refs/heads/master","pushedAt":"2023-11-24T21:54:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"interpreter: Fix RFE to GTE opcode\n\nI am not sure why the previous code checked that the interrupt bits in\nthe Cause register were all cleared; what I do know is that it was not\nworking properly, and caused crashes in Um Jammer Lammy and graphical\nglitches in Vagrant Story and Colin Mc Rae Rally.\n\nHandle RFE to GTE opcodes by actually checking that the EPC register\npoints to a GTE opcode.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"interpreter: Fix RFE to GTE opcode"}},{"before":"eb2d1a88ff22a5a71e27efffdbdb423bb9b91b4f","after":"109d0a6ba35d0279b9d0bf5bacafabc2d634af7b","ref":"refs/heads/master","pushedAt":"2023-11-19T22:35:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"pcercuei","name":"Paul Cercueil","path":"/pcercuei","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/403272?s=80&v=4"},"commit":{"message":"lightrec: Fix reap of covered blocks\n\nIf we overwrite the code LUT and reap the underlying block of each\nbranch target of the current block being recompiled, we have a race,\nbecause the underlying blocks may be used by different entry points in\nthe code LUT that we still haven't cleared.\n\nThe only solution is to first mark all blocks as dead, and make sure\nthey won't be recompiled, and then clear them from the code LUT all at\nonce.\n\nThis should fix the (hopefully) last race of the threaded compiler.\n\nSigned-off-by: Paul Cercueil ","shortMessageHtmlLink":"lightrec: Fix reap of covered blocks"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEqn0zTQA","startCursor":null,"endCursor":null}},"title":"Activity ยท pcercuei/lightrec"}