diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2017-07-26 22:01:17 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2017-08-11 00:30:57 +0800 |
commit | a323486a9bf40d60eb1a7914aaf38bb412c74ea0 (patch) | |
tree | 5df510e099ced84733b6f0a99dd140944450220a /docs | |
parent | abe6eb983073d5a8e6d5ac469e4c437ea421c79d (diff) | |
download | dexon-solidity-a323486a9bf40d60eb1a7914aaf38bb412c74ea0.tar.gz dexon-solidity-a323486a9bf40d60eb1a7914aaf38bb412c74ea0.tar.zst dexon-solidity-a323486a9bf40d60eb1a7914aaf38bb412c74ea0.zip |
Add pure assembly example for summing
Diffstat (limited to 'docs')
-rw-r--r-- | docs/assembly.rst | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/docs/assembly.rst b/docs/assembly.rst index 2f5b8812..5288089f 100644 --- a/docs/assembly.rst +++ b/docs/assembly.rst @@ -96,6 +96,29 @@ you really know what you are doing. } } } + + // Same as above, but accomplish the entire code within inline assembly. + function sumPureAsm(uint[] _data) returns (uint o_sum) { + assembly { + // Load the length (first 32 bytes) + let len := mload(_data) + + // Skip over the length field. + _data := add(_data, 0x20) + + // Set up a bound. + let end := add(_data, len) + + // Iterate until the bound is not met. + for {} lt(_data, end) {} { + o_sum := add(o_sum, mload(_data)) + _data := add(_data, 0x20) + } + + // NOTE: after this point it is not safe to use _data in Solidity code + // because its offsets are in an invalid position + } + } } |