From 8e4568b2eb82a9b83a50e7f4d81dd1b3f2243ed8 Mon Sep 17 00:00:00 2001 From: Francois Bojarski Date: Thu, 10 Oct 2024 11:04:46 +0530 Subject: [PATCH] fix (again) reading exo Bytes Signed-off-by: Francois Bojarski --- .../consensys/linea/zktracer/module/mmu/MmuData.java | 10 ++++++---- .../linea/zktracer/module/mmu/MmuOperation.java | 10 ++++------ .../net/consensys/linea/zktracer/types/Bytecodes.java | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java index e9f0df7f86..87e10554b2 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuData.java @@ -18,6 +18,9 @@ import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_ANY_TO_RAM_WITH_PADDING; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_BLAKE; import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_EXO_TO_RAM_TRANSPLANTS; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_MODEXP_DATA; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_MODEXP_ZERO; +import static net.consensys.linea.zktracer.module.constants.GlobalConstants.MMU_INST_RAM_TO_EXO_WITH_PADDING; import java.util.ArrayList; import java.util.List; @@ -26,7 +29,6 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import net.consensys.linea.zktracer.module.constants.GlobalConstants; import net.consensys.linea.zktracer.module.hub.fragment.imc.mmu.MmuCall; import net.consensys.linea.zktracer.module.mmu.values.HubToMmuValues; import net.consensys.linea.zktracer.module.mmu.values.MmuEucCallRecord; @@ -62,9 +64,9 @@ public class MmuData { private static final List MMU_INST_EXO_IS_TARGET = List.of( MMU_INST_BLAKE, - GlobalConstants.MMU_INST_MODEXP_DATA, - GlobalConstants.MMU_INST_MODEXP_ZERO, - GlobalConstants.MMU_INST_RAM_TO_EXO_WITH_PADDING); + MMU_INST_MODEXP_DATA, + MMU_INST_MODEXP_ZERO, + MMU_INST_RAM_TO_EXO_WITH_PADDING); public MmuData(final MmuCall mmuCall) { this( diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java index bfca85fbc2..b040713d97 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/module/mmu/MmuOperation.java @@ -170,19 +170,17 @@ public void fillLimb() { ? mmioInst.sourceLimbOffset() * LLARGE + mmioInst.sourceByteOffset() : mmioInst.targetLimbOffset() * LLARGE + mmioInst.targetByteOffset()); final int sizeToExtract = mmioInst.size() == 0 ? LLARGE : mmioInst.size(); + final int exoByteOffset = + exoIsSource ? mmioInst.sourceByteOffset() : mmioInst.targetByteOffset(); final Bytes16 exoLimb = - readBytes(mmuData.exoBytes(), offset, sizeToExtract, mmioInst.targetByteOffset()); + readBytes(mmuData.exoBytes(), offset, sizeToExtract, exoByteOffset); + ; mmioInst.limb(exoLimb); } } } } - private boolean exoLimbIsSource() { - return List.of(MMU_INST_ANY_TO_RAM_WITH_PADDING, MMU_INST_EXO_TO_RAM_TRANSPLANTS) - .contains(this.mmuData.hubToMmuValues().mmuInstruction()); - } - private void traceFillMmuInstructionFlag(Trace trace) { trace .isMload(isMload) diff --git a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java index a3a6edf00c..fb49bbbfea 100644 --- a/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java +++ b/arithmetization/src/main/java/net/consensys/linea/zktracer/types/Bytecodes.java @@ -23,7 +23,7 @@ public class Bytecodes { public static Bytes16 readBytes( - final Bytes data, final long sourceOffset, final int size, final int targetOffset) { + final Bytes data, final long sourceOffset, final int size, final int exoByteOffset) { if (sourceOffset >= data.size()) { return Bytes16.ZERO; } @@ -32,7 +32,7 @@ public static Bytes16 readBytes( return Bytes16.leftPad( rightPadTo( - data.slice((int) sourceOffset, (int) dataLengthToExtract), LLARGE - targetOffset)); + data.slice((int) sourceOffset, (int) dataLengthToExtract), LLARGE - exoByteOffset)); } public static Bytes16 readLimb(final Bytes data, final long limbOffset) {