Skip to content

Commit fddb200

Browse files
author
Grant Wuerker
committed
hacking
1 parent a255e19 commit fddb200

File tree

8 files changed

+328
-64
lines changed

8 files changed

+328
-64
lines changed

crates/codegen/src/yul/isel/function.rs

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -619,30 +619,12 @@ impl<'db, 'a> FuncLowerHelper<'db, 'a> {
619619
.ty(self.db.upcast(), &self.body.store)
620620
.deref(self.db.upcast());
621621
match op {
622-
BinOp::Add => self
623-
.ctx
624-
.runtime
625-
.safe_add(self.db, lhs_expr, rhs_expr, inst_result_ty),
626-
BinOp::Sub => self
627-
.ctx
628-
.runtime
629-
.safe_sub(self.db, lhs_expr, rhs_expr, inst_result_ty),
630-
BinOp::Mul => self
631-
.ctx
632-
.runtime
633-
.safe_mul(self.db, lhs_expr, rhs_expr, inst_result_ty),
634-
BinOp::Div => self
635-
.ctx
636-
.runtime
637-
.safe_div(self.db, lhs_expr, rhs_expr, inst_result_ty),
638-
BinOp::Mod => self
639-
.ctx
640-
.runtime
641-
.safe_mod(self.db, lhs_expr, rhs_expr, inst_result_ty),
642-
BinOp::Pow => self
643-
.ctx
644-
.runtime
645-
.safe_pow(self.db, lhs_expr, rhs_expr, inst_result_ty),
622+
BinOp::Add => expression! { add([lhs_expr], [rhs_expr]) },
623+
BinOp::Sub => expression! { sub([lhs_expr], [rhs_expr]) },
624+
BinOp::Mul => expression! { mul([lhs_expr], [rhs_expr]) },
625+
BinOp::Div => expression! { div([lhs_expr], [rhs_expr]) },
626+
BinOp::Mod => expression! { mod([lhs_expr], [rhs_expr]) },
627+
BinOp::Pow => expression! { pow([lhs_expr], [rhs_expr]) },
646628
BinOp::Shl => expression! {shl([rhs_expr], [lhs_expr])},
647629
BinOp::Shr if is_result_signed => expression! {sar([rhs_expr], [lhs_expr])},
648630
BinOp::Shr => expression! {shr([rhs_expr], [lhs_expr])},

crates/driver/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ fn compile_test(db: &mut Db, test: FunctionId, optimize: bool) -> CompiledTest {
214214
let yul_test = fe_codegen::yul::isel::lower_test(db, test)
215215
.to_string()
216216
.replace('"', "\\\"");
217-
// panic!("{}", yul_test);
217+
println!("{}", yul_test);
218218
let bytecode = compile_to_evm("test", &yul_test, optimize);
219219
CompiledTest::new(test.name(db), bytecode)
220220
}

crates/kevm/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ impl KSpec {
8585

8686
cmd.arg("build")
8787
.arg("test-prove-fe")
88+
.arg("-j8")
8889
.current_dir(kevm_dir_path)
8990
.env("FS_ID", fs_id)
9091
.status()

crates/library/std/src/buf.fe

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct Cursor {
2929
/// Reverts if the cursor is advanced beyond the given length.
3030
pub fn advance(mut self, len: u256) -> u256 {
3131
let cur: u256 = self.cur
32-
assert cur + len < self.len + 1
32+
// assert cur + len < self.len + 1
3333
self.cur += len
3434
return cur
3535
}
@@ -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 + 31), 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) {
@@ -164,8 +165,7 @@ impl MemoryBufferWrite for u16 {
164165

165166
impl MemoryBufferWrite for u8 {
166167
fn write_buf(self, mut writer: MemoryBufferWriter) {
167-
let offset: u256 = writer.write_offset(len: 1)
168-
unsafe { evm::mstore8(offset, value: self) }
168+
writer.write_n(value: u256(self), len: 1)
169169
}
170170
}
171171

@@ -174,27 +174,6 @@ impl MemoryBufferWrite for () {
174174
fn write_buf(self, mut writer: MemoryBufferWriter) {}
175175
}
176176

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-
198177
/// Memory buffer reader abstraction.
199178
pub struct MemoryBufferReader {
200179
buf: MemoryBuffer
File renamed without changes.

crates/fe/fixtures/buf.fe renamed to fixtures/buf.fe

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ fn rw_u8(a: u8, b: u8) {
77
let mut reader: MemoryBufferReader = buf.reader()
88
let mut writer: MemoryBufferWriter = buf.writer()
99

10-
writer.write_u8(value: a)
11-
writer.write_u8(value: b)
10+
writer.write(value: a)
11+
writer.write(value: b)
1212

1313
spec::assert_eq(reader.read_u8(), a)
1414
spec::assert_eq(reader.read_u8(), b)
@@ -20,7 +20,7 @@ fn rw_single_u8(a: u8) {
2020
let mut reader: MemoryBufferReader = buf.reader()
2121
let mut writer: MemoryBufferWriter = buf.writer()
2222

23-
writer.write_u8(value: a)
23+
writer.write(value: a)
2424
spec::assert_eq(reader.read_u8(), a)
2525
}
2626

@@ -30,7 +30,7 @@ fn rw_single_u16(a: u16) {
3030
let mut reader: MemoryBufferReader = buf.reader()
3131
let mut writer: MemoryBufferWriter = buf.writer()
3232

33-
writer.write_u16(value: a)
33+
writer.write(value: a)
3434
spec::assert_eq(reader.read_u16(), a)
3535
}
3636

@@ -40,22 +40,21 @@ fn rw_u16(a: u16, b: u16) {
4040
let mut reader: MemoryBufferReader = buf.reader()
4141
let mut writer: MemoryBufferWriter = buf.writer()
4242

43-
writer.write_u16(value: a)
44-
writer.write_u16(value: b)
43+
writer.write(value: a)
44+
writer.write(value: b)
4545

4646
spec::assert_eq(reader.read_u16(), a)
4747
spec::assert_eq(reader.read_u16(), b)
4848
}
4949

50-
5150
#invariant
5251
fn rw_u256(a: u256, b: u256) {
5352
let mut buf: MemoryBuffer = MemoryBuffer::new(len: 64)
5453
let mut reader: MemoryBufferReader = buf.reader()
5554
let mut writer: MemoryBufferWriter = buf.writer()
5655

57-
writer.write_u256(value: a)
58-
writer.write_u256(value: b)
56+
writer.write(value: a)
57+
writer.write(value: b)
5958

6059
spec::assert_eq(reader.read_u256(), a)
6160
spec::assert_eq(reader.read_u256(), b)
@@ -67,10 +66,10 @@ fn rw_mix(a: u256, b: u8, c: u128, d: u128) {
6766
let mut reader: MemoryBufferReader = buf.reader()
6867
let mut writer: MemoryBufferWriter = buf.writer()
6968

70-
writer.write_u256(value: a)
71-
writer.write_u8(value: b)
72-
writer.write_u128(value: c)
73-
writer.write_u128(value: d)
69+
writer.write(value: a)
70+
writer.write(value: b)
71+
writer.write(value: c)
72+
writer.write(value: d)
7473

7574
spec::assert_eq(reader.read_u256(), a)
7675
spec::assert_eq(reader.read_u8(), b)
File renamed without changes.

0 commit comments

Comments
 (0)