Skip to content

Commit 330841c

Browse files
authored
Merge pull request argotorg#1 from ethereum/master
buf changes from master repo
2 parents a67a8f4 + c7015d1 commit 330841c

2 files changed

Lines changed: 4 additions & 23 deletions

File tree

crates/library/std/src/buf.fe

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub struct MemoryBuffer {
4747

4848
pub fn new(len: u256) -> Self {
4949
unsafe {
50-
return MemoryBuffer(offset: alloc(len), len)
50+
return MemoryBuffer(offset: alloc(len: len + 30), len)
5151
}
5252
}
5353

@@ -103,7 +103,8 @@ pub struct MemoryBufferWriter {
103103

104104
pub fn write_n(mut self, value: u256, len: u256) {
105105
let offset: u256 = self.write_offset(len)
106-
unsafe { rewrite_slot(offset, value, len) }
106+
let shifted_value: u256 = evm::shl(bits: 256 - len * 8, value)
107+
unsafe { evm::mstore(offset, value: shifted_value) }
107108
}
108109

109110
pub fn write_buf(mut self, buf: MemoryBuffer) {
@@ -174,27 +175,6 @@ impl MemoryBufferWrite for () {
174175
fn write_buf(self, mut writer: MemoryBufferWriter) {}
175176
}
176177

177-
/// Rewrites the left-most `len` bytes in slot with the right-most `len` bytes of `value`.
178-
unsafe fn rewrite_slot(offset: u256, value: u256, len: u256) {
179-
// bit mask for right side of 256 bit slot
180-
let mask: u256 = evm::shr(
181-
bits: len * 8,
182-
value: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
183-
)
184-
// new value shifted to left
185-
let shifted_value: u256 = evm::shl(
186-
bits: 256 - len * 8,
187-
value
188-
)
189-
190-
let old_value: u256 = evm::mload(offset)
191-
let new_value: u256 = evm::bitwise_or(
192-
evm::bitwise_and(mask, old_value),
193-
shifted_value
194-
)
195-
evm::mstore(offset, value: new_value)
196-
}
197-
198178
/// Memory buffer reader abstraction.
199179
pub struct MemoryBufferReader {
200180
buf: MemoryBuffer

newsfragments/898.performance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
`MemoryBuffer` now allocates an extra 31 bytes. This removes the need for runtime checks and bitshifting needed to ensure safe writing to a `MemoryBuffer`'s region.

0 commit comments

Comments
 (0)