diff --git a/.gas-snapshot b/.gas-snapshot index 251f9f580..33613b6b5 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -12,12 +12,12 @@ Base64Test:testBase64EncodeToStringWithSinglePadding() (gas: 1636) Base64Test:testBase64WordBoundary() (gas: 12511) Base64Test:test__codesize() (gas: 7857) CREATE3Test:testDeployERC20() (gas: 800066) -CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 870427, ~: 869184) +CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 871887, ~: 869184) CREATE3Test:testDeployedUpperBitsSafeForPlainSolidity() (gas: 609) CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96901099) -CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880238, ~: 96880072) +CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880241, ~: 96880072) CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889159) -CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881103, ~: 96881057) +CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881101, ~: 96881057) CREATE3Test:test__codesize() (gas: 15758) DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 256, μ: 4036, ~: 4074) DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 256, μ: 3978, ~: 3932) @@ -612,16 +612,16 @@ LibStringTest:testToStringZeroBrutalized() (gas: 597698) LibStringTest:testToStringZeroRightPadded(uint256) (runs: 256, μ: 728906, ~: 597374) LibStringTest:test__codesize() (gas: 39660) LibZipTest:testCdCompress() (gas: 166388) -LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 791207, ~: 639141) -LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 789894, ~: 694403) +LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 797816, ~: 640136) +LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 790014, ~: 697705) LibZipTest:testCdFallback() (gas: 5691887) -LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1198096, ~: 1040825) -LibZipTest:testCdFallbackMaskTrick(uint256) (runs: 256, μ: 638, ~: 611) -LibZipTest:testDecompressWontRevert(bytes) (runs: 256, μ: 720462, ~: 618115) -LibZipTest:testFlzCompressDecompress() (gas: 2149416) -LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 859748, ~: 675014) -LibZipTest:testFlzCompressDecompress2() (gas: 1001791) -LibZipTest:test__codesize() (gas: 20650) +LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1212573, ~: 1033427) +LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 256, μ: 690, ~: 663) +LibZipTest:testDecompressWontRevert(bytes) (runs: 256, μ: 734431, ~: 618862) +LibZipTest:testFlzCompressDecompress() (gas: 2151512) +LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 878240, ~: 675310) +LibZipTest:testFlzCompressDecompress2() (gas: 1003822) +LibZipTest:test__codesize() (gas: 20689) MerkleProofLibTest:testEmptyCalldataHelpers() (gas: 1086) MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 256, μ: 718173, ~: 630726) MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 256, μ: 33429, ~: 32418) diff --git a/src/utils/LibZip.sol b/src/utils/LibZip.sol index 3eb9cc7c4..641d1f752 100644 --- a/src/utils/LibZip.sol +++ b/src/utils/LibZip.sol @@ -255,7 +255,7 @@ library LibZip { assembly { if iszero(calldatasize()) { return(calldatasize(), calldatasize()) } let o := 0 - let f := sub(0, 4) // For negating the first 4 bytes. + let f := not(3) // For negating the first 4 bytes. for { let i := 0 } lt(i, calldatasize()) {} { let c := byte(0, xor(add(i, f), calldataload(i))) i := add(i, 1) diff --git a/test/LibZip.t.sol b/test/LibZip.t.sol index d04dea79f..e9f534e03 100644 --- a/test/LibZip.t.sol +++ b/test/LibZip.t.sol @@ -235,18 +235,15 @@ contract LibZipTest is SoladyTest { assertTrue(success); } - function testCdFallbackMaskTrick(uint256 i) public { + function testCdFallbackMaskTrick(uint256 i, uint256 j) public { i = _bound(i, 0, 2 ** 248 - 1); - uint256 mask; + uint256 a; + uint256 b; /// @solidity memory-safe-assembly assembly { - let f := sub(0, 4) - mask := byte(0, add(i, f)) - } - if (i < 4) { - assertEq(mask, 0xff); - } else { - assertEq(mask, 0x00); + a := byte(0, xor(add(i, not(3)), j)) + b := xor(byte(i, shl(224, 0xffffffff)), byte(0, j)) } + assertEq(a, b); } }