From 31b2ccd3bbf91cc5cc2842b45fb4d534cf52eafe Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 9 May 2024 07:35:54 -0700 Subject: [PATCH] [a64] Protect address-generation from imm-overflow --- src/xenia/cpu/backend/a64/a64_seq_memory.cc | 3 ++- src/xenia/cpu/backend/a64/a64_sequences.cc | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/xenia/cpu/backend/a64/a64_seq_memory.cc b/src/xenia/cpu/backend/a64/a64_seq_memory.cc index 7a09bac8f..71c5c982c 100644 --- a/src/xenia/cpu/backend/a64/a64_seq_memory.cc +++ b/src/xenia/cpu/backend/a64/a64_seq_memory.cc @@ -78,7 +78,8 @@ XReg ComputeMemoryAddress(A64Emitter& e, const T& guest, // displacement it would be sign extended and mess things up. uint32_t address = static_cast(guest.constant()); if (address < 0x80000000) { - e.ADD(address_register.toX(), e.GetMembaseReg(), address); + e.MOV(W0, address); + e.ADD(address_register.toX(), e.GetMembaseReg(), X0); return address_register.toX(); } else { if (address >= 0xE0000000 && diff --git a/src/xenia/cpu/backend/a64/a64_sequences.cc b/src/xenia/cpu/backend/a64/a64_sequences.cc index bf1820083..f1538b870 100644 --- a/src/xenia/cpu/backend/a64/a64_sequences.cc +++ b/src/xenia/cpu/backend/a64/a64_sequences.cc @@ -1187,13 +1187,14 @@ void EmitAddCarryXX(A64Emitter& e, const ARGS& i) { // TODO(benvanik): faster setting? we could probably do some fun math tricks // here to get the carry flag set. if (i.src3.is_constant) { + e.MOV(W0, WZR); if (i.src3.constant()) { // Set carry // This is implicitly "SUBS 0 - 0" - e.CMP(WZR.toW(), 0); + e.CMP(W0, 0); } else { // Clear carry - e.CMN(WZR.toW(), 0); + e.CMN(W0, 0); } } else { // If src3 is non-zero, set the carry flag