Skip to content

Commit

Permalink
Optimize
Browse files Browse the repository at this point in the history
  • Loading branch information
Vectorized committed Jul 17, 2023
1 parent a549dab commit a3a9afd
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 19 deletions.
33 changes: 17 additions & 16 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ 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, μ: 872250, ~: 869184)
CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 870427, ~: 869184)
CREATE3Test:testDeployedUpperBitsSafeForPlainSolidity() (gas: 609)
CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96901101)
CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880248, ~: 96880072)
CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889413)
CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881107, ~: 96881057)
CREATE3Test:test__codesize() (gas: 15798)
CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96901099)
CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880238, ~: 96880072)
CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889159)
CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881103, ~: 96881057)
CREATE3Test:test__codesize() (gas: 15758)
DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 256, μ: 4036, ~: 4074)
DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 256, μ: 3978, ~: 3932)
DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 256, μ: 3975, ~: 3954)
Expand Down Expand Up @@ -611,16 +611,17 @@ LibStringTest:testToStringZero() (gas: 1218)
LibStringTest:testToStringZeroBrutalized() (gas: 597698)
LibStringTest:testToStringZeroRightPadded(uint256) (runs: 256, μ: 728906, ~: 597374)
LibStringTest:test__codesize() (gas: 39660)
LibZipTest:testCdCompress() (gas: 164552)
LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 750872, ~: 638603)
LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 809433, ~: 691981)
LibZipTest:testCdFallback() (gas: 5726590)
LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1175039, ~: 1040387)
LibZipTest:testDecompressWontRevert(bytes) (runs: 256, μ: 782915, ~: 617896)
LibZipTest:testFlzCompressDecompress() (gas: 2106991)
LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 838933, ~: 670408)
LibZipTest:testFlzCompressDecompress2() (gas: 989171)
LibZipTest:test__codesize() (gas: 20648)
LibZipTest:testCdCompress() (gas: 166388)
LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 791207, ~: 639141)
LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 789894, ~: 694403)
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)
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)
Expand Down
6 changes: 3 additions & 3 deletions src/utils/LibZip.sol
Original file line number Diff line number Diff line change
Expand Up @@ -255,12 +255,12 @@ library LibZip {
assembly {
if iszero(calldatasize()) { return(calldatasize(), calldatasize()) }
let o := 0
let f := shl(224, 0xffffffff) // For negating the first 4 bytes.
let f := sub(0, 4) // For negating the first 4 bytes.
for { let i := 0 } lt(i, calldatasize()) {} {
let c := xor(byte(i, f), byte(0, calldataload(i)))
let c := byte(0, xor(add(i, f), calldataload(i)))
i := add(i, 1)
if iszero(c) {
let d := xor(byte(i, f), byte(0, calldataload(i)))
let d := byte(0, xor(add(i, f), calldataload(i)))
i := add(i, 1)
// Fill with either 0xff or 0x00.
mstore(o, not(0))
Expand Down
15 changes: 15 additions & 0 deletions test/LibZip.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -234,4 +234,19 @@ contract LibZipTest is SoladyTest {
assertEq(address(mockCd).balance, callValue * 2);
assertTrue(success);
}

function testCdFallbackMaskTrick(uint256 i) public {
i = _bound(i, 0, 2 ** 248 - 1);
uint256 mask;
/// @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);
}
}
}

0 comments on commit a3a9afd

Please sign in to comment.