From 5ba06892c0ecd8a6c9997ca898913aabfb7f057f Mon Sep 17 00:00:00 2001 From: George Hotz Date: Thu, 1 Jan 2026 12:46:08 -0500 Subject: [PATCH] generic --- extra/assembly/amd/emu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/assembly/amd/emu.py b/extra/assembly/amd/emu.py index 76e04d4144..dd6395cf30 100644 --- a/extra/assembly/amd/emu.py +++ b/extra/assembly/amd/emu.py @@ -241,8 +241,8 @@ def exec_vector(st: WaveState, inst: Inst, lane: int, lds: LDSMem | None = None) if isinstance(inst, FLAT): addr = V[inst.addr] | (V[inst.addr + 1] << 32) ADDR = (st.rsgpr64(inst.saddr) + V[inst.addr] + _sext(inst.offset, 13)) & MASK64 if inst.saddr not in (NULL, 0x7f) else (addr + _sext(inst.offset, 13)) & MASK64 - # D16_HI loads preserve low 16 bits of destination, so VDATA must be read from vdst not inst.data - vdata_src = vdst if 'D16_HI' in op_name and 'LOAD' in op_name else inst.data + # For loads, VDATA comes from vdst (preserves unwritten bits); for stores, from inst.data + vdata_src = vdst if 'LOAD' in op_name else inst.data result = fn(GlobalMem, ADDR, _vgpr_read(V, vdata_src, ndwords), Reg(V[vdst]), Reg(0)) if 'VDATA' in result: _vgpr_write(V, vdst, result['VDATA']._val, ndwords) if 'RETURN_DATA' in result: _vgpr_write(V, vdst, result['RETURN_DATA']._val, ndwords)