On 8/20/21 2:03 AM, Peter Maydell wrote:
-        } else if (datalo != addend) {
+        } else if (scratch_addend) {
              tcg_out_ld32_rwb(s, COND_AL, datalo, addend, addrlo);
              tcg_out_ld32_12(s, COND_AL, datahi, addend, 4);
          } else {

I don't understand this change. Yes, we can trash the addend
register, but if it's the same as 'datalo' then the second load
is not going to DTRT... Shouldn't this be
   if (scratch_addend && datalo != addend)
?

Previously, addend was *always* a scratch register, TCG_REG_TMP or such.
Afterward, addend may be TCG_REG_GUEST_BASE, which should not be modified.
At no point is there overlap between addend and data{hi,lo}.

r~

Reply via email to