github phforner0/Xendroid-Plus XenDroid-v87-29223981
Xendroid+ 29223981 (build 87)

Audio, graphics and CPU fixes from xenia-edge. The first launch of each game after this update rebuilds its pipeline cache.

Scheduler, kernel, input and network fixes from xenia-edge, plus Android-specific fixes to sockets and thread sync.

CPU, ARM64 code generation, kernel and XAM fixes from xenia-edge.

Texture and resolve fixes from xenia-edge and Xenia Canary.

Kernel cryptography and executable decryption now run on Mbed TLS, as in xenia-edge, fixing several results that differed from the console.

Faster CPU emulation on ARM64 from xenia-edge, and audio that game threads no longer hold up.

Xendroid+ now has a license of its own: the GNU AGPL, version 3 or later.

  • Audio fixes: LEGO games no longer freeze in their opening cutscenes, NBA Live 06's menus no longer stall the audio, the musou games' music plays without skips, and Tekken Tag Tournament 2 keeps its sound.
  • Graphics fixes: draws that used mirrored memory addresses are no longer dropped, and texture formats, shader translation and the Gears of War: Judgment scene decode are corrected.
  • CPU instructions that returned wrong results now behave like the console.
  • Black Ops II plays its music.
  • Halo: Reach no longer hangs in its menu, Oblivion shows the character name prompt, Eternal Sonata's battle tutorial appears, and Crackdown no longer runs out of memory on the sign-in screen.
  • Events reset by the game itself, timers and signal-and-wait calls wake their threads as on the console.
  • Online code: closed connections, socket errors and select calls behave like Winsock, and select no longer crashes or stalls other game threads.
  • Several ARM64 instruction sequences that returned wrong results now match the console, including 8- and 16-bit values, dot products and floating-point modes around system calls.
  • The JIT no longer races other threads on ARM64 when it publishes a compiled function, and games that patch or move their executable image start correctly.
  • Kernel cryptography and profile handling are fixed, and games no longer read profiles with a language set as parental controlled.
  • Wide 1D textures sample the right texels and filter as the game asks.
  • Texture layouts in memory are corrected for arrays, volumes, packed mips and tiled 3D textures, and textures no longer show stale data in Dynasty Warriors 5 and 6 Empires.
  • Effects that games build with resolves, such as opacity planes, fog and water refraction, render correctly.
  • MD5 no longer writes past the game's own memory, and SHA-512, HMAC, DES parity and AES decryption return the console's results.
  • Encrypted data whose size is not a multiple of the block size is no longer read or written past its buffer.
  • A game that signs its saves with these functions may report a save made with an earlier version as damaged.
  • Leaner ARM64 code for common guest instructions, and dead condition-register writes removed before code generation.
  • PowerPC overflow flags (XER OV and SO) are now emulated.
  • Audio conversion uses NEON, and the audio pump no longer waits behind the emulator's global lock.
  • Anyone who distributes a modified Xendroid+, or runs one as a service over the network, has to publish its source code under the same license.
  • About → Licenses shows the license, its text and where the source code is.

Full Changelog: XenDroid-v79-726ef8f8...XenDroid-v87-29223981

✅ Tested on a POCO F7 (Snapdragon 8s Gen 4): Forza Horizon in game — the game's own threads do 11% less CPU work per frame, at the same 30 fps.

What's new

Other changes

  • Varredura do upstream (xenia-edge, Canary e game-patches): o que vale portar, em 37 temas e 6 lotes (#39)
🇧🇷 Em português

Correções de áudio, gráficos e CPU do xenia-edge. Na primeira vez que cada jogo abre depois desta atualização, o cache de pipelines é refeito.

Correções do escalonador, do kernel, da entrada e da rede do xenia-edge, mais correções próprias do Android em sockets e sincronização de threads.

Correções de CPU, geração de código ARM64, kernel e XAM do xenia-edge.

Correções de texturas e resolves do xenia-edge e do Xenia Canary.

A criptografia do kernel e a decifragem dos executáveis passam a usar o Mbed TLS, como no xenia-edge, e vários resultados que diferiam do console foram corrigidos.

Emulação da CPU mais rápida em ARM64, do xenia-edge, e áudio que as threads do jogo não seguram mais.

O Xendroid+ agora tem licença própria: a GNU AGPL, versão 3 ou posterior.

  • Áudio: os jogos LEGO não travam mais nas cutscenes de abertura, os menus do NBA Live 06 não param mais o áudio, a música dos musou toca sem pulos e o Tekken Tag Tournament 2 não perde o som.
  • Gráficos: draws com endereços espelhados não são mais descartados, e formatos de textura, tradução de shaders e a decodificação da cena do Gears of War: Judgment estão corrigidos.
  • Instruções da CPU que davam resultado errado agora se comportam como no console.
  • O Black Ops II toca a música.
  • O Halo: Reach não trava mais no menu, o Oblivion mostra o prompt de nome do personagem, o tutorial de batalha do Eternal Sonata aparece e o Crackdown não esgota mais a memória na tela de login.
  • Eventos que o próprio jogo reinicia, timers e chamadas de sinalizar-e-esperar acordam as threads como no console.
  • Código online: conexões fechadas, erros de socket e o select se comportam como no Winsock, e o select não derruba mais o processo nem trava as outras threads do jogo.
  • Várias sequências de instruções ARM64 que davam resultado errado agora batem com o console, incluindo valores de 8 e 16 bits, produtos escalares e modos de ponto flutuante em volta de chamadas do sistema.
  • O JIT não corre mais contra outras threads em ARM64 ao publicar uma função compilada, e jogos que aplicam patches ou movem a imagem do executável iniciam certo.
  • A criptografia do kernel e o tratamento de perfis foram corrigidos, e perfis com idioma definido não são mais lidos como sob controle dos pais.
  • Texturas 1D largas amostram os texels certos e filtram como o jogo pede.
  • O layout das texturas na memória foi corrigido para arrays, volumes, mips empacotados e texturas 3D tiled, e as texturas não mostram mais dados velhos no Dynasty Warriors 5 e 6 Empires.
  • Efeitos que os jogos montam com resolves, como planos de opacidade, neblina e refração da água, aparecem certos.
  • O MD5 não escreve mais além da memória do próprio jogo, e SHA-512, HMAC, paridade do DES e decifragem AES devolvem os resultados do console.
  • Dados cifrados com tamanho que não é múltiplo do bloco não são mais lidos nem escritos além do buffer.
  • Um jogo que assina os saves com essas funções pode dizer que um save feito numa versão anterior está danificado.
  • Código ARM64 mais enxuto para instruções comuns do guest, e escritas mortas de registradores de condição removidas antes da geração de código.
  • As flags de overflow do PowerPC (XER OV e SO) agora são emuladas.
  • A conversão de áudio usa NEON, e o pump de áudio não espera mais atrás da trava global do emulador.
  • Quem distribuir um Xendroid+ modificado, ou rodá-lo como serviço pela rede, tem de publicar o código-fonte sob a mesma licença.
  • Sobre → Licenças mostra a licença, o texto dela e onde está o código-fonte.

✅ Testado num POCO F7 (Snapdragon 8s Gen 4): Forza Horizon em jogo — as threads do próprio jogo fazem 11% menos trabalho de CPU por quadro, nos mesmos 30 fps.

Outras mudanças

  • Varredura do upstream (xenia-edge, Canary e game-patches): o que vale portar, em 37 temas e 6 lotes (#39)
📜 Every change since build 79 · 8 pull requests, 172 commits
  • #41 Upstream, lote 2: cache de pipelines, XMA, correções de GPU e instruções PPC · @phforner0
    • [GPU] Sample locked mip unnormalized fetches in the mip's grid · 1bd47b44
    • [GPU] Walk the guest swizzle for integer scales; update comments Fixed integer fetches are updated to look widths up through the guest swizzle, so every output channel is scaled by the width it came from. · fd0fa088
    • [GPU] Give integer scales the channel width that feeds each lane · bfaab00e
    • [GPU] Mask guest fetch addresses to physical · 6aa53642
    • [GPU] Fix scalar ALU swizzles with three-source vector ops · 1b8a3f9c
    • [GPU/SPIRV] Write the documented result value for kill instructions · 92254bc5
    • [CPU] Set both vcmpbfp bounds bits for a NaN operand · af371519
    • [Kernel/XboxKrnl] Give arm64 a real spin hint · a924deac
    • [APU] Follow the sub-stream skip chain past frameless packets · 55e5430b
    • Revert "Revert "[Kernel] Initial XMP Notifications"" · 057517e7
    • [APU] Drain the current frame before ending the XMA work loop · 119d21bd
    • [CPU/HIR] Flip the lane index in the constant Extract fold · 13070c2f
    • [CPU] Fix mcrf: copy the CR field instead of comparing it against zero · a236818a
    • [Vulkan] Cache host viewport info across draws · 6e65c21d
    • [Vulkan] Fix swapped stage and access masks on scratch buffer growth · 1554ba33
    • [GPU/PM4] Publish ring read pointer every RB_BLKSZ dwords not per burst · f8d56eec
    • [XboxKrnl] Deliver guest C++ throws to a catch(...) handler · 13dd64ac
    • [XMA] Count the frame whose header crosses the packet boundary · b158aa79
    • [GPU] Sum the pipeline storage versions instead of taking the max · e6673018
    • [XMA] Resolve XMA loop_start to a frame boundary · cf4a2526
    • [PPC] Fix VMX128/disassembly opcode table entries · 56aee46a
    • [CPU] Compare HIR constants by raw bits when merging compares · bfd94414
    • [GPU] Let the host viewport start at a negative coordinate · 440947bb
    • [GPU] Handle PM4_WAIT_IB_PFD_COMPLETE · 9f3030a8
    • [CPU] Implement mtfsb0 and mtfsb1 · 6311899f
    • [Emulator] Stop host worker threads instead of terminating them · f66bccf0
    • [PPC] Clear only the exception bits in mcrfs · ca0f684a
    • [GPU] Drop cached primitive conversions a guest write overlaps · bea30c1d
    • [PPC] Decode the mtfsfi immediate from the top of the RB field · 8722bcb7
    • [XAM] Fix XUserMuteListQuery logging an error on every call · bfa98fd4
    • [GPU] Gate the 7e3 to 8_8_8_8 decode on the written channels · 439ba5ef
    • [GPU] Wake parked guest threads on the intermediate ring read pointer · 74149634
    • [GPU] Check memexport routing on the physical vertex fetch address · c107f39f
  • #42 Upstream, lote 3: escalonador de fibras, objetos do kernel, timers, entrada e rede · @phforner0
    • [Kernel] Split guest scheduler re-poll bumps from real preemptions · 1e627ccc
    • [Kernel] Add the console's background window to the guest scheduler · d94ffd88
    • [Kernel] Reconcile the guest dispatch header on native object lookup · 4d3bc8c8
    • [Kernel] Resolve the cooperative waiter once instead of per poll · 5c6a077b
    • [Kernel] Guest scheduler re-home ready guest thread on affinity change · dcbe120b
    • [Kernel] Reuse one APC per timer instead of allocating one per expiry · eea6ebe2
    • [Kernel] Signal guest scheduler timer waits from the expiry callback · 31604dc7
    • [XAM] Fix getsockname byte order and add getpeername · ab6a6c91
    • [XAM] Poll select on guest scheduler fibers · 0bc8b478
    • [Kernel] Leave the target's IRQL alone on a host-thread APC insert · cedd2330
    • [XAM] Return ERROR_EMPTY from XamInputGetKeystrokeEx with no keystroke · 81db9a94
    • [XAM] Report controllers like xam while UI holds the input · 48c3949f
    • [XAM/Net] Fixes WSAWaitForMultipleEvents timeouts reporting · c78512aa
    • [XAM/Net] Fix socket errors not reaching WSAGetLastError · 4f016929
    • [Kernel/XSocket] Fixes recv reporting closed TCP connection as an error · fad9c95c
    • [XAM/Net] select on Android: closed sockets, nfds and failures · 3fa6572b
    • [Kernel] Enter the cooperative wait before signaling in SignalAndWait · c34b1555
    • [Kernel] Mutant release clears its owner visibly before the header (ARM64) · b2e00d7c
    • [Kernel] Thread-exit APC rundown no longer follows a timer's APC · 0a4089cc
  • #44 Upstream, lote 4: backend A64, núcleo da CPU, cripto do kernel, XAM e emulador · @phforner0
    • [XAM] Fixed returning incorrect max property size · 0b22626a
    • [XAM] Bound profile setting and GPD string reads · 8ef0f57b
    • [CPU/a64] Fix narrow (I8/I16) value-width bugs vs the x64 reference backend · 9c9e1232
    • [CPU] Don't assert on unknown thread in OnThreadExit/OnThreadDestroyed · 4c52f179
    • [A64] Preserve infinities through dot product instead of returning QNaN · 1f421e41
    • [XAM] Fixed potential OOB memory write in copy utils · e7216cfe
    • [A64] Keep a constant vector operand off the clobbered scratch · 4546011a
    • [CPU/x64] Constant-initialize the emitter's XMM constant table · dbcba163
    • [A64] Load the lvlx/lvrx base control from the literal pool · 661190a0
    • add memfd fallback and remove gate check · 23e0f2f2
    • [CPU] Publish JIT entry results under the entry table lock · 8e07f263
    • [CPU/A64] Revert the LDR + REV byte-swap detection in MMIO decode · 79b27ef4
    • [CPU] Skip the granularity call for addresses below the physical heap · c4c490db
    • [CPU] Emit the stack sync check after the source offset stamp · f834e997
    • [CPU] Run the pending stack sync check before the epilog · ac135c14
    • [Patcher] Fixed loading plugin configs on linux · df310069
    • [Kernel] Take the deployment type from the container content type · e98da7c3
    • [XboxKrnl/Crypt] Leave the padded block in the SHA context · 62efd830
    • [Emulator] Add media_type cvar to override detected media type (odd/hdd) · 65fa42bc
    • [CPU] Move overlapping XEX patch regions with memmove · 88c504df
    • [CPU] Record MMIO faults on a64 and gate the 0xE0000000 host offset · f9b12c63
    • [HID] Don't treat a device-type mismatch as a controller disconnect · e08fc2f4
    • [Emulator] Load title plugins before main thread execution begins · 11c675f4
    • [CPU] Precompile CRT static initializers before launch · 6f99ab4a
    • [CPU] Replace EntryTable's split_map with a hash map and ready index · d2328ce3
    • [CPU] Fix XEX patches that move the image base · f0f6bc15
    • [Core] Report JIT exceptions outside any guest function safely · c53a68c1
    • [PPC] Lower a direct call with no owning module as an indirect call · d7ee3759
    • [A64] Forget the FPCR mode across CallNativeSafe · a602bc4a
    • [A64] Load both constants in float MAX/MIN · 1f6f7328
    • [A64] Enter host code with the host FPCR, not the guest's · fce63b9b
    • [CPU] Keep host and guest FP modes apart around guest callbacks · f7599498
    • [CPU] Never resolve a longjmp onto a function's first instruction · 8d0f9f69
    • [Kernel] Schedule the RC4 key with its own size · 0c398806
    • [Kernel] Fix RSA bignum long division · 2c7d8f58
    • [Emulator] Keep migrated headers until every copy of them succeeds · fe8111f0
    • [APU] Give the null audio system a driver that discards frames · f0a58ec9
    • [XAM] Add mutex for properties vector · 02f4af85
    • [XAM] Fix profiles with a language set reading as parental controlled · 6d22962f
    • [APU] Keep the pump top-up off the null audio driver · 865fee0a
    • and 1 more commits
  • #43 Upstream, lote 5: texturas 1D largas, layout de texturas, resolves e memexport (depende do #41) · @phforner0
    • [GPU] Sample locked mip unnormalized fetches in the mip's grid · 1bd47b44
    • [GPU] Walk the guest swizzle for integer scales; update comments Fixed integer fetches are updated to look widths up through the guest swizzle, so every output channel is scaled by the width it came from. · fd0fa088
    • [GPU] Give integer scales the channel width that feeds each lane · bfaab00e
    • [GPU] Mask guest fetch addresses to physical · 6aa53642
    • [GPU] Fix scalar ALU swizzles with three-source vector ops · 1b8a3f9c
    • [GPU/SPIRV] Write the documented result value for kill instructions · 92254bc5
    • [CPU] Set both vcmpbfp bounds bits for a NaN operand · af371519
    • [Kernel/XboxKrnl] Give arm64 a real spin hint · a924deac
    • [APU] Follow the sub-stream skip chain past frameless packets · 55e5430b
    • Revert "Revert "[Kernel] Initial XMP Notifications"" · 057517e7
    • [APU] Drain the current frame before ending the XMA work loop · 119d21bd
    • [CPU/HIR] Flip the lane index in the constant Extract fold · 13070c2f
    • [CPU] Fix mcrf: copy the CR field instead of comparing it against zero · a236818a
    • [Vulkan] Cache host viewport info across draws · 6e65c21d
    • [Vulkan] Fix swapped stage and access masks on scratch buffer growth · 1554ba33
    • [GPU/PM4] Publish ring read pointer every RB_BLKSZ dwords not per burst · f8d56eec
    • [XboxKrnl] Deliver guest C++ throws to a catch(...) handler · 13dd64ac
    • [XMA] Count the frame whose header crosses the packet boundary · b158aa79
    • [GPU] Sum the pipeline storage versions instead of taking the max · e6673018
    • [XMA] Resolve XMA loop_start to a frame boundary · cf4a2526
    • [PPC] Fix VMX128/disassembly opcode table entries · 56aee46a
    • [CPU] Compare HIR constants by raw bits when merging compares · bfd94414
    • [GPU] Let the host viewport start at a negative coordinate · 440947bb
    • [GPU] Handle PM4_WAIT_IB_PFD_COMPLETE · 9f3030a8
    • [CPU] Implement mtfsb0 and mtfsb1 · 6311899f
    • [Emulator] Stop host worker threads instead of terminating them · f66bccf0
    • [PPC] Clear only the exception bits in mcrfs · ca0f684a
    • [GPU] Drop cached primitive conversions a guest write overlaps · bea30c1d
    • [PPC] Decode the mtfsfi immediate from the top of the RB field · 8722bcb7
    • [XAM] Fix XUserMuteListQuery logging an error on every call · bfa98fd4
    • [GPU] Gate the 7e3 to 8_8_8_8 decode on the written channels · 439ba5ef
    • [GPU] Wake parked guest threads on the intermediate ring read pointer · 74149634
    • [GPU] Check memexport routing on the physical vertex fetch address · c107f39f
    • [GPU] Handle two component tfetch1D coordinates · 91790b6a
    • [GPU] Select alpha for A8 resolves · 231e2265
    • [GPU] Wide 1D textures: sample at the row center, row pitch of 8192 · 9198eaa5
    • [GPU] Select promoted tfetch1D layouts at runtime · 4ad5b4a8
    • [GPU] Fix base map selection with a separate mip page · 8073cdf4
    • [Vulkan] Push scaled resolve barriers instead of recording directly · 2fb20ea8
    • [GPU] Specialize FSI pixel shaders for the guest MSAA sample count · 4853b8e4
    • and 15 more commits
  • #45 Upstream, cripto: criptografia do kernel e decifragem de XEX sobre o Mbed TLS · @phforner0
    • [XAM] Fixed returning incorrect max property size · 0b22626a
    • [XAM] Bound profile setting and GPD string reads · 8ef0f57b
    • [CPU/a64] Fix narrow (I8/I16) value-width bugs vs the x64 reference backend · 9c9e1232
    • [CPU] Don't assert on unknown thread in OnThreadExit/OnThreadDestroyed · 4c52f179
    • [A64] Preserve infinities through dot product instead of returning QNaN · 1f421e41
    • [XAM] Fixed potential OOB memory write in copy utils · e7216cfe
    • [A64] Keep a constant vector operand off the clobbered scratch · 4546011a
    • [CPU/x64] Constant-initialize the emitter's XMM constant table · dbcba163
    • [A64] Load the lvlx/lvrx base control from the literal pool · 661190a0
    • add memfd fallback and remove gate check · 23e0f2f2
    • [CPU] Publish JIT entry results under the entry table lock · 8e07f263
    • [CPU/A64] Revert the LDR + REV byte-swap detection in MMIO decode · 79b27ef4
    • [CPU] Skip the granularity call for addresses below the physical heap · c4c490db
    • [CPU] Emit the stack sync check after the source offset stamp · f834e997
    • [CPU] Run the pending stack sync check before the epilog · ac135c14
    • [Patcher] Fixed loading plugin configs on linux · df310069
    • [Kernel] Take the deployment type from the container content type · e98da7c3
    • [XboxKrnl/Crypt] Leave the padded block in the SHA context · 62efd830
    • [Emulator] Add media_type cvar to override detected media type (odd/hdd) · 65fa42bc
    • [CPU] Move overlapping XEX patch regions with memmove · 88c504df
    • [CPU] Record MMIO faults on a64 and gate the 0xE0000000 host offset · f9b12c63
    • [HID] Don't treat a device-type mismatch as a controller disconnect · e08fc2f4
    • [Emulator] Load title plugins before main thread execution begins · 11c675f4
    • [CPU] Precompile CRT static initializers before launch · 6f99ab4a
    • [CPU] Replace EntryTable's split_map with a hash map and ready index · d2328ce3
    • [CPU] Fix XEX patches that move the image base · f0f6bc15
    • [Core] Report JIT exceptions outside any guest function safely · c53a68c1
    • [PPC] Lower a direct call with no owning module as an indirect call · d7ee3759
    • [A64] Forget the FPCR mode across CallNativeSafe · a602bc4a
    • [A64] Load both constants in float MAX/MIN · 1f6f7328
    • [A64] Enter host code with the host FPCR, not the guest's · fce63b9b
    • [CPU] Keep host and guest FP modes apart around guest callbacks · f7599498
    • [CPU] Never resolve a longjmp onto a function's first instruction · 8d0f9f69
    • [Kernel] Schedule the RC4 key with its own size · 0c398806
    • [Kernel] Fix RSA bignum long division · 2c7d8f58
    • [Emulator] Keep migrated headers until every copy of them succeeds · fe8111f0
    • [APU] Give the null audio system a driver that discards frames · f0a58ec9
    • [XAM] Add mutex for properties vector · 02f4af85
    • [XAM] Fix profiles with a language set reading as parental controlled · 6d22962f
    • [APU] Keep the pump top-up off the null audio driver · 865fee0a
    • and 18 more commits
  • #46 Upstream, lote 6: desempenho da CPU (backend A64, frontend PPC, passes do HIR) e do áudio · @phforner0
    • [GPU] Sample locked mip unnormalized fetches in the mip's grid · 1bd47b44
    • [GPU] Walk the guest swizzle for integer scales; update comments Fixed integer fetches are updated to look widths up through the guest swizzle, so every output channel is scaled by the width it came from. · fd0fa088
    • [GPU] Give integer scales the channel width that feeds each lane · bfaab00e
    • [GPU] Mask guest fetch addresses to physical · 6aa53642
    • [GPU] Fix scalar ALU swizzles with three-source vector ops · 1b8a3f9c
    • [GPU/SPIRV] Write the documented result value for kill instructions · 92254bc5
    • [CPU] Set both vcmpbfp bounds bits for a NaN operand · af371519
    • [Kernel/XboxKrnl] Give arm64 a real spin hint · a924deac
    • [APU] Follow the sub-stream skip chain past frameless packets · 55e5430b
    • Revert "Revert "[Kernel] Initial XMP Notifications"" · 057517e7
    • [APU] Drain the current frame before ending the XMA work loop · 119d21bd
    • [CPU/HIR] Flip the lane index in the constant Extract fold · 13070c2f
    • [CPU] Fix mcrf: copy the CR field instead of comparing it against zero · a236818a
    • [Vulkan] Cache host viewport info across draws · 6e65c21d
    • [Vulkan] Fix swapped stage and access masks on scratch buffer growth · 1554ba33
    • [GPU/PM4] Publish ring read pointer every RB_BLKSZ dwords not per burst · f8d56eec
    • [XboxKrnl] Deliver guest C++ throws to a catch(...) handler · 13dd64ac
    • [XMA] Count the frame whose header crosses the packet boundary · b158aa79
    • [GPU] Sum the pipeline storage versions instead of taking the max · e6673018
    • [XMA] Resolve XMA loop_start to a frame boundary · cf4a2526
    • [PPC] Fix VMX128/disassembly opcode table entries · 56aee46a
    • [CPU] Compare HIR constants by raw bits when merging compares · bfd94414
    • [GPU] Let the host viewport start at a negative coordinate · 440947bb
    • [GPU] Handle PM4_WAIT_IB_PFD_COMPLETE · 9f3030a8
    • [CPU] Implement mtfsb0 and mtfsb1 · 6311899f
    • [Emulator] Stop host worker threads instead of terminating them · f66bccf0
    • [PPC] Clear only the exception bits in mcrfs · ca0f684a
    • [GPU] Drop cached primitive conversions a guest write overlaps · bea30c1d
    • [PPC] Decode the mtfsfi immediate from the top of the RB field · 8722bcb7
    • [XAM] Fix XUserMuteListQuery logging an error on every call · bfa98fd4
    • [GPU] Gate the 7e3 to 8_8_8_8 decode on the written channels · 439ba5ef
    • [GPU] Wake parked guest threads on the intermediate ring read pointer · 74149634
    • [GPU] Check memexport routing on the physical vertex fetch address · c107f39f
    • [XAM] Fixed returning incorrect max property size · 0b22626a
    • [XAM] Bound profile setting and GPD string reads · 8ef0f57b
    • [CPU/a64] Fix narrow (I8/I16) value-width bugs vs the x64 reference backend · 9c9e1232
    • [CPU] Don't assert on unknown thread in OnThreadExit/OnThreadDestroyed · 4c52f179
    • [A64] Preserve infinities through dot product instead of returning QNaN · 1f421e41
    • [XAM] Fixed potential OOB memory write in copy utils · e7216cfe
    • [A64] Keep a constant vector operand off the clobbered scratch · 4546011a
    • and 58 more commits
  • #39 Varredura do upstream (xenia-edge, Canary e game-patches): o que vale portar, em 37 temas e 6 lotes · @phforner0
    • Docs: upstream sweep of xenia-edge, Canary and game-patches (2026-10-15) · d93fb6e6
    • Docs: upstream sweep, what moved while porting batches 1 and 2 · 2003e9f6
    • Docs: upstream sweep, what moved while porting batch 3, and what the triage missed · 2ffd215c
    • Docs: upstream sweep, what moved while porting batches 4 and 5 · d034e4e5
    • Docs: upstream sweep, the crypto and batch 6 PRs, and what batch 1 gained · fcf9f366
    • Docs: upstream sweep, review fixes to the batch 1, crypto and batch 6 notes · b6b9d523
    • Docs: upstream sweep, the batch 6 A/B on the POCO F7 · c49ad6b8
  • #49 Licença: o código do Xendroid+ sob a AGPL-3.0-or-later · @phforner0
    • License Xendroid+'s own code under the AGPL-3.0-or-later · 902f010f

Built by Xendroid+ #87 from 29223981, signed with the release key.

File Size SHA-256
XenDroid_Release_29223981.apk 40.5 MiB 5d7613446422b31849e46792c6c7b2b4745266e8e1d258d949e5b220327710d6

Don't miss a new Xendroid-Plus release

NewReleases is sending notifications on new releases.