From faf764e66854179decd8773770c8159c82cc54aa Mon Sep 17 00:00:00 2001 From: Nicholas Mosier Date: Tue, 22 Oct 2024 09:34:30 -0700 Subject: [PATCH] arch-x86: break 32/64-bit LEA's input dependency on prior dest value (#1683) Fix #1682. Treat LEA as a BigLdStOp. BigLdStOps (as well as other Big* x86 uops) do not have input dependencies on 32-/64-bit destinations. LEA will still have input dependencies on 16-bit destinations. (LEA cannot have an 8-bit destination.) Change-Id: I5d0678e6bd79bfd6064941a89c6fe290750543c9 --- src/arch/x86/isa/microops/ldstop.isa | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/arch/x86/isa/microops/ldstop.isa b/src/arch/x86/isa/microops/ldstop.isa index 5336f3a5fc..81c13ffb27 100644 --- a/src/arch/x86/isa/microops/ldstop.isa +++ b/src/arch/x86/isa/microops/ldstop.isa @@ -720,8 +720,15 @@ let {{ "memDataSize": "dataSize" }) header_output += MicroLeaDeclare.subst(iop) exec_output += MicroLeaExecute.subst(iop) + iop = InstObjParams("lea", "LeaBig", 'X86ISA::LdStOp', + { "code": "Data = EA & mask(dataSize * 8);", + "ea_code": "EA = " + segmentEAExpr, + "memDataSize": "dataSize" }) + header_output += MicroLeaDeclare.subst(iop) + exec_output += MicroLeaExecute.subst(iop) - class LeaOp(LdStOp): + + class LeaOp(BigLdStOp): def __init__(self, data, segment, addr, disp = 0, dataSize="env.dataSize", addressSize="env.addressSize"): super().__init__(data, segment, addr, disp,