Skip to content

Commit 8dfcd6d

Browse files
committed
fix: add memcpy transpiler to tests
1 parent a55ae5b commit 8dfcd6d

File tree

24 files changed

+157
-62
lines changed

24 files changed

+157
-62
lines changed

Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/sdk/src/config/openvm_standard.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
[app_vm_config.io]
44

55
[app_vm_config.keccak]
6+
[app_vm_config.memcpy]
67
[app_vm_config.sha256]
78
[app_vm_config.bigint]
89

extensions/algebra/tests/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ openvm-transpiler.workspace = true
1515
openvm-algebra-transpiler.workspace = true
1616
openvm-algebra-circuit.workspace = true
1717
openvm-rv32im-transpiler.workspace = true
18+
openvm-memcpy-transpiler.workspace = true
1819
openvm-toolchain-tests = { path = "../../../crates/toolchain/tests" }
1920
openvm-ecc-circuit.workspace = true
2021
eyre.workspace = true

extensions/algebra/tests/src/lib.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ mod tests {
1212
use openvm_circuit::utils::{air_test, test_system_config};
1313
use openvm_ecc_circuit::SECP256K1_CONFIG;
1414
use openvm_instructions::exe::VmExe;
15+
use openvm_memcpy_transpiler::MemcpyTranspilerExtension;
1516
use openvm_rv32im_transpiler::{
1617
Rv32ITranspilerExtension, Rv32IoTranspilerExtension, Rv32MTranspilerExtension,
1718
};
@@ -49,7 +50,8 @@ mod tests {
4950
.with_extension(Rv32ITranspilerExtension)
5051
.with_extension(Rv32MTranspilerExtension)
5152
.with_extension(Rv32IoTranspilerExtension)
52-
.with_extension(ModularTranspilerExtension),
53+
.with_extension(ModularTranspilerExtension)
54+
.with_extension(MemcpyTranspilerExtension),
5355
)?;
5456

5557
air_test(Rv32ModularBuilder, config, openvm_exe);
@@ -66,7 +68,8 @@ mod tests {
6668
.with_extension(Rv32ITranspilerExtension)
6769
.with_extension(Rv32MTranspilerExtension)
6870
.with_extension(Rv32IoTranspilerExtension)
69-
.with_extension(ModularTranspilerExtension),
71+
.with_extension(ModularTranspilerExtension)
72+
.with_extension(MemcpyTranspilerExtension),
7073
)?;
7174
air_test(Rv32ModularBuilder, config, openvm_exe);
7275
Ok(())
@@ -93,7 +96,8 @@ mod tests {
9396
.with_extension(Rv32MTranspilerExtension)
9497
.with_extension(Rv32IoTranspilerExtension)
9598
.with_extension(Fp2TranspilerExtension)
96-
.with_extension(ModularTranspilerExtension),
99+
.with_extension(ModularTranspilerExtension)
100+
.with_extension(MemcpyTranspilerExtension),
97101
)?;
98102
air_test(Rv32ModularWithFp2Builder, config, openvm_exe);
99103
Ok(())
@@ -125,7 +129,8 @@ mod tests {
125129
.with_extension(Rv32MTranspilerExtension)
126130
.with_extension(Rv32IoTranspilerExtension)
127131
.with_extension(Fp2TranspilerExtension)
128-
.with_extension(ModularTranspilerExtension),
132+
.with_extension(ModularTranspilerExtension)
133+
.with_extension(MemcpyTranspilerExtension),
129134
)?;
130135
air_test(Rv32ModularWithFp2Builder, config, openvm_exe);
131136
Ok(())
@@ -145,7 +150,8 @@ mod tests {
145150
.with_extension(Rv32MTranspilerExtension)
146151
.with_extension(Rv32IoTranspilerExtension)
147152
.with_extension(Fp2TranspilerExtension)
148-
.with_extension(ModularTranspilerExtension),
153+
.with_extension(ModularTranspilerExtension)
154+
.with_extension(MemcpyTranspilerExtension),
149155
)?;
150156
air_test(Rv32ModularWithFp2Builder, config, openvm_exe);
151157
Ok(())
@@ -173,7 +179,8 @@ mod tests {
173179
.with_extension(Rv32MTranspilerExtension)
174180
.with_extension(Rv32IoTranspilerExtension)
175181
.with_extension(Fp2TranspilerExtension)
176-
.with_extension(ModularTranspilerExtension),
182+
.with_extension(ModularTranspilerExtension)
183+
.with_extension(MemcpyTranspilerExtension),
177184
)
178185
.unwrap();
179186
air_test(Rv32ModularBuilder, config, openvm_exe);
@@ -189,7 +196,8 @@ mod tests {
189196
.with_extension(Rv32ITranspilerExtension)
190197
.with_extension(Rv32MTranspilerExtension)
191198
.with_extension(Rv32IoTranspilerExtension)
192-
.with_extension(ModularTranspilerExtension),
199+
.with_extension(ModularTranspilerExtension)
200+
.with_extension(MemcpyTranspilerExtension),
193201
)?;
194202
air_test(Rv32ModularBuilder, config, openvm_exe);
195203
Ok(())

extensions/ecc/tests/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ openvm-algebra-transpiler.workspace = true
1515
openvm-ecc-transpiler.workspace = true
1616
openvm-ecc-circuit.workspace = true
1717
openvm-rv32im-transpiler.workspace = true
18+
openvm-memcpy-transpiler.workspace = true
1819
openvm-toolchain-tests = { path = "../../../crates/toolchain/tests" }
1920
openvm-sdk.workspace = true
2021
serde.workspace = true

extensions/ecc/tests/src/lib.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ mod tests {
1717
CurveConfig, Rv32WeierstrassBuilder, Rv32WeierstrassConfig, P256_CONFIG, SECP256K1_CONFIG,
1818
};
1919
use openvm_ecc_transpiler::EccTranspilerExtension;
20+
use openvm_memcpy_transpiler::MemcpyTranspilerExtension;
2021
use openvm_rv32im_transpiler::{
2122
Rv32ITranspilerExtension, Rv32IoTranspilerExtension, Rv32MTranspilerExtension,
2223
};
@@ -60,7 +61,8 @@ mod tests {
6061
.with_extension(Rv32MTranspilerExtension)
6162
.with_extension(Rv32IoTranspilerExtension)
6263
.with_extension(EccTranspilerExtension)
63-
.with_extension(ModularTranspilerExtension),
64+
.with_extension(ModularTranspilerExtension)
65+
.with_extension(MemcpyTranspilerExtension),
6466
)?;
6567
air_test(Rv32WeierstrassBuilder, config, openvm_exe);
6668
Ok(())
@@ -82,7 +84,8 @@ mod tests {
8284
.with_extension(Rv32MTranspilerExtension)
8385
.with_extension(Rv32IoTranspilerExtension)
8486
.with_extension(EccTranspilerExtension)
85-
.with_extension(ModularTranspilerExtension),
87+
.with_extension(ModularTranspilerExtension)
88+
.with_extension(MemcpyTranspilerExtension),
8689
)?;
8790
air_test(Rv32WeierstrassBuilder, config, openvm_exe);
8891
Ok(())
@@ -105,7 +108,8 @@ mod tests {
105108
.with_extension(Rv32MTranspilerExtension)
106109
.with_extension(Rv32IoTranspilerExtension)
107110
.with_extension(EccTranspilerExtension)
108-
.with_extension(ModularTranspilerExtension),
111+
.with_extension(ModularTranspilerExtension)
112+
.with_extension(MemcpyTranspilerExtension),
109113
)?;
110114
air_test(Rv32WeierstrassBuilder, config, openvm_exe);
111115
Ok(())
@@ -152,7 +156,8 @@ mod tests {
152156
.with_extension(Rv32MTranspilerExtension)
153157
.with_extension(Rv32IoTranspilerExtension)
154158
.with_extension(EccTranspilerExtension)
155-
.with_extension(ModularTranspilerExtension),
159+
.with_extension(ModularTranspilerExtension)
160+
.with_extension(MemcpyTranspilerExtension),
156161
)?;
157162

158163
let p = Secp256k1Affine::generator();
@@ -265,7 +270,8 @@ mod tests {
265270
.with_extension(Rv32MTranspilerExtension)
266271
.with_extension(Rv32IoTranspilerExtension)
267272
.with_extension(EccTranspilerExtension)
268-
.with_extension(ModularTranspilerExtension),
273+
.with_extension(ModularTranspilerExtension)
274+
.with_extension(MemcpyTranspilerExtension),
269275
)
270276
.unwrap();
271277
let config =

extensions/memcpy/transpiler/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ impl<F: PrimeField32> TranspilerExtension<F> for MemcpyTranspilerExtension {
3636
}
3737

3838
// Parse U-type instruction format
39-
let dec_insn = UType::new(instruction_u32);
39+
let mut dec_insn = UType::new(instruction_u32);
4040
let shift = dec_insn.imm >> 12;
41+
dec_insn.rd = 1; // avoid using x0, otherwise we get nop()
4142

4243
// Validate shift value (0, 1, 2, or 3)
4344
if ![0, 1, 2, 3].contains(&shift) {

extensions/rv32im/tests/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ openvm-transpiler.workspace = true
1515
openvm-rv32im-circuit.workspace = true
1616
openvm-rv32im-guest.workspace = true
1717
openvm-rv32im-transpiler.workspace = true
18+
openvm-memcpy-transpiler.workspace = true
1819
openvm = { workspace = true }
1920
openvm-toolchain-tests = { path = "../../../crates/toolchain/tests" }
2021
eyre.workspace = true

extensions/rv32im/tests/src/lib.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ mod tests {
99
utils::{air_test, air_test_with_min_segments, test_system_config},
1010
};
1111
use openvm_instructions::{exe::VmExe, instruction::Instruction, LocalOpcode, SystemOpcode};
12+
use openvm_memcpy_transpiler::MemcpyTranspilerExtension;
1213
use openvm_rv32im_circuit::{Rv32IBuilder, Rv32IConfig, Rv32ImBuilder, Rv32ImConfig};
1314
use openvm_rv32im_guest::hint_load_by_key_encode;
1415
use openvm_rv32im_transpiler::{
@@ -46,7 +47,8 @@ mod tests {
4647
Transpiler::<F>::default()
4748
.with_extension(Rv32ITranspilerExtension)
4849
.with_extension(Rv32MTranspilerExtension)
49-
.with_extension(Rv32IoTranspilerExtension),
50+
.with_extension(Rv32IoTranspilerExtension)
51+
.with_extension(MemcpyTranspilerExtension),
5052
)?;
5153
change_rv32m_insn_to_nop(&mut exe);
5254
air_test_with_min_segments(Rv32IBuilder, config, exe, vec![], min_segments);
@@ -63,7 +65,8 @@ mod tests {
6365
Transpiler::<F>::default()
6466
.with_extension(Rv32ITranspilerExtension)
6567
.with_extension(Rv32IoTranspilerExtension)
66-
.with_extension(Rv32MTranspilerExtension),
68+
.with_extension(Rv32MTranspilerExtension)
69+
.with_extension(MemcpyTranspilerExtension),
6770
)?;
6871
air_test_with_min_segments(Rv32ImBuilder, config, exe, vec![], min_segments);
6972
Ok(())
@@ -84,7 +87,8 @@ mod tests {
8487
Transpiler::<F>::default()
8588
.with_extension(Rv32ITranspilerExtension)
8689
.with_extension(Rv32IoTranspilerExtension)
87-
.with_extension(Rv32MTranspilerExtension),
90+
.with_extension(Rv32MTranspilerExtension)
91+
.with_extension(MemcpyTranspilerExtension),
8892
)?;
8993
air_test_with_min_segments(Rv32ImBuilder, config, exe, vec![], min_segments);
9094
Ok(())
@@ -99,7 +103,8 @@ mod tests {
99103
Transpiler::<F>::default()
100104
.with_extension(Rv32ITranspilerExtension)
101105
.with_extension(Rv32MTranspilerExtension)
102-
.with_extension(Rv32IoTranspilerExtension),
106+
.with_extension(Rv32IoTranspilerExtension)
107+
.with_extension(MemcpyTranspilerExtension),
103108
)?;
104109
let input = vec![[0, 1, 2, 3].map(F::from_canonical_u8).to_vec()];
105110
air_test_with_min_segments(Rv32ImBuilder, config, exe, input, 1);
@@ -115,7 +120,8 @@ mod tests {
115120
Transpiler::<F>::default()
116121
.with_extension(Rv32ITranspilerExtension)
117122
.with_extension(Rv32MTranspilerExtension)
118-
.with_extension(Rv32IoTranspilerExtension),
123+
.with_extension(Rv32IoTranspilerExtension)
124+
.with_extension(MemcpyTranspilerExtension),
119125
)?;
120126
// stdin will be read after reading kv_store
121127
let stdin = vec![[0, 1, 2].map(F::from_canonical_u8).to_vec()];
@@ -138,7 +144,8 @@ mod tests {
138144
Transpiler::<F>::default()
139145
.with_extension(Rv32ITranspilerExtension)
140146
.with_extension(Rv32MTranspilerExtension)
141-
.with_extension(Rv32IoTranspilerExtension),
147+
.with_extension(Rv32IoTranspilerExtension)
148+
.with_extension(MemcpyTranspilerExtension),
142149
)?;
143150

144151
#[derive(serde::Serialize)]
@@ -169,7 +176,8 @@ mod tests {
169176
Transpiler::<F>::default()
170177
.with_extension(Rv32ITranspilerExtension)
171178
.with_extension(Rv32MTranspilerExtension)
172-
.with_extension(Rv32IoTranspilerExtension),
179+
.with_extension(Rv32IoTranspilerExtension)
180+
.with_extension(MemcpyTranspilerExtension),
173181
)?;
174182

175183
let executor = VmExecutor::new(config.clone())?;
@@ -211,7 +219,8 @@ mod tests {
211219
Transpiler::<F>::default()
212220
.with_extension(Rv32ITranspilerExtension)
213221
.with_extension(Rv32MTranspilerExtension)
214-
.with_extension(Rv32IoTranspilerExtension),
222+
.with_extension(Rv32IoTranspilerExtension)
223+
.with_extension(MemcpyTranspilerExtension),
215224
)?;
216225
air_test(Rv32ImBuilder, config, exe);
217226
Ok(())
@@ -226,7 +235,8 @@ mod tests {
226235
Transpiler::<F>::default()
227236
.with_extension(Rv32ITranspilerExtension)
228237
.with_extension(Rv32MTranspilerExtension)
229-
.with_extension(Rv32IoTranspilerExtension),
238+
.with_extension(Rv32IoTranspilerExtension)
239+
.with_extension(MemcpyTranspilerExtension),
230240
)?;
231241

232242
let executor = VmExecutor::new(config)?;
@@ -253,7 +263,8 @@ mod tests {
253263
Transpiler::<F>::default()
254264
.with_extension(Rv32ITranspilerExtension)
255265
.with_extension(Rv32MTranspilerExtension)
256-
.with_extension(Rv32IoTranspilerExtension),
266+
.with_extension(Rv32IoTranspilerExtension)
267+
.with_extension(MemcpyTranspilerExtension),
257268
)?;
258269
air_test(Rv32ImBuilder, config, exe);
259270
Ok(())
@@ -273,7 +284,8 @@ mod tests {
273284
Transpiler::<F>::default()
274285
.with_extension(Rv32ITranspilerExtension)
275286
.with_extension(Rv32MTranspilerExtension)
276-
.with_extension(Rv32IoTranspilerExtension),
287+
.with_extension(Rv32IoTranspilerExtension)
288+
.with_extension(MemcpyTranspilerExtension),
277289
)?;
278290
air_test(Rv32ImBuilder, config, exe);
279291
Ok(())
@@ -289,7 +301,8 @@ mod tests {
289301
Transpiler::<F>::default()
290302
.with_extension(Rv32ITranspilerExtension)
291303
.with_extension(Rv32MTranspilerExtension)
292-
.with_extension(Rv32IoTranspilerExtension),
304+
.with_extension(Rv32IoTranspilerExtension)
305+
.with_extension(MemcpyTranspilerExtension),
293306
)
294307
.unwrap();
295308
let executor = VmExecutor::new(config).unwrap();
@@ -315,7 +328,8 @@ mod tests {
315328
Transpiler::<F>::default()
316329
.with_extension(Rv32ITranspilerExtension)
317330
.with_extension(Rv32MTranspilerExtension)
318-
.with_extension(Rv32IoTranspilerExtension),
331+
.with_extension(Rv32IoTranspilerExtension)
332+
.with_extension(MemcpyTranspilerExtension),
319333
)
320334
.unwrap();
321335
air_test(Rv32ImBuilder, config, exe);

0 commit comments

Comments
 (0)